CentOS6/7 配置守护进程

打印 上一主题 下一主题

主题 974|帖子 974|积分 2922

CentOS6.x

CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。
一、相关命令
通过initctl help可以查看相关命令
  1. [root@localhost ~]# initctl help
  2. Job commands:
  3.   start                       Start job.
  4.   stop                        Stop job.
  5.   restart                     Restart job.
  6.   reload                      Send HUP signal to job.
  7.   status                      Query status of job.
  8.   list                        List known jobs.
  9. Event commands:
  10.   emit                        Emit an event.
  11. Other commands:
  12.   reload-configuration        Reload the configuration of the init daemon.
  13.   version                     Request the version of the init daemon.
  14.   log-priority                Change the minimum priority of log messages from the init daemon
  15.   usage                       Show job usage message if available.
  16.   help                        display list of commands
  17. For more information on a command, try `initctl COMMAND --help'.
复制代码
 
二、自己配置一个
在/etc/init/文件夹中新建一个testserver.conf配置文件。
通过exec执行发布出来的程序可执行文件。通过设置respawn让程序反复启动。
start on runlevel [2345]stop on runlevel [!2345]respawnexec /usr/local/src/testserver/testserver然后启动
  1. initctl reload-configuration
  2. initctl list
  3. initctl start testserver
复制代码
通过initctl list即可看程序是不是处于running启动状态。
  1. [root@localhost ~]# initctl list
  2. vmware-tools start/running
  3. rc stop/waiting
  4. tty (/dev/tty3) start/running, process 3024
  5. tty (/dev/tty2) start/running, process 3022
  6. tty (/dev/tty6) start/running, process 3033
  7. tty (/dev/tty5) start/running, process 3028
  8. tty (/dev/tty4) start/running, process 3026
  9. plymouth-shutdown stop/waiting
  10. testserver start/running, process 4157
  11. control-alt-delete stop/waiting
  12. rcS-emergency stop/waiting
  13. readahead-collector stop/waiting
  14. kexec-disable stop/waiting
  15. quit-plymouth stop/waiting
  16. rcS stop/waiting
  17. prefdm start/running, process 3017
  18. init-system-dbus stop/waiting
  19. ck-log-system-restart stop/waiting
  20. readahead stop/waiting
  21. ck-log-system-start stop/waiting
  22. splash-manager stop/waiting
  23. start-ttys stop/waiting
  24. readahead-disable-services stop/waiting
  25. ck-log-system-stop stop/waiting
  26. rcS-sulogin stop/waiting
  27. serial stop/waiting
复制代码
可以看到其处于启动状态,现在守护进程已经设置成功。
另外,配置文件中可以通过script ... end script执行脚本。举个例子
  1. start on runlevel [2345]
  2. stop on runlevel [!2345]
  3. script
  4. echo “test~~~~~” >>/tmp/test.txt
  5. end script
复制代码
CentOS7.x

Centos7中可以通过systemd配置守护进程。
一、Unit的含义
systemd可以管理所有系统资源,不同资源统称为 Unit,一共分为12种:
  1. Service unit:   系统服务
  2. Target unit:    多个unit构成一个组
  3. Device unit:    硬件设备
  4. Mount unit:     文件系统的挂载点
  5. Automount unit: 自动挂载点
  6. Path unit:      文件或路径
  7. Scope unit:     不是由Systemd启动的外部进程
  8. Slice unit:     进程组
  9. Snapshot unit:  Systemd快照,可以切回某个快照
  10. Socket unit:    进程间通信的socket
  11. Swap unit:      swap文件
  12. Timer unit:     定时器
复制代码
二、Unit管理常用命令(主要针对service)
  1. # 开机自启动
  2. systemctl enable nginx
  3. # 关闭自启动
  4. systemctl disable nginx
  5. # 服务状态
  6. systemctl status nginx
  7. # 服务重启
  8. systemctl restart nginx
  9. # 杀死一个服务
  10. systemctl kill nginx
  11. # 显示已启动的服务
  12. systemctl list-units --type=service
复制代码
 
三、Unit配置文件
每一个Unit都有一个配置文件,用于告诉系统如何启动Unit,systemd默认从 /etc/systemd/system/ 目录读取配置文件,
Unit配置文件目录主要有三个:
  1. /lib/systemd/system
  2. /run/systemd/system
  3. /etc/systemd/system
复制代码
 
四、Unit服务配置
每个服务以.service后缀,一般会分为3部分:[Unit],[Service],[Install],具体以nginx服务为例:
  1. [Unit]
  2. Description=nginx - high performance web server
  3. After=network.target remote-fs.target nss-lookup.target
  4. [Service]
  5. Type=forking
  6. PIDFile=/usr/local/nginx/logs/nginx.pid
  7. ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
  8. ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
  9. ExecReload=/usr/local/nginx/sbin/nginx -s reload
  10. ExecStop=/usr/local/nginx/sbin/nginx -s stop
  11. #Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉
  12. Restart=on-failure
  13. RestartSec=30
  14. [Install]
  15. WantedBy=multi-user.target
复制代码
1、[Unit]区块
[Unit]区块通常是配置文件的第一个区块,用来定义Unit的元数据,以及配置与其他Unit的关系。
  1. Description: 简短描述
  2. Documentation: 文档地址
  3. After:依赖,仅当依赖的服务启动之后再启动自定义的服务单元
复制代码
2、[Service]区块
[Service]区块用来Service的配置,只有service类型的unit才有本区块。
Type: 定义启动时的进程行为。它有以下几种值:
  1. Type=simple  :(默认值) systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是 socket 激活型。
  2. Type=forking :systemd认为当该服务进程 fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。
  3.                使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程。
  4. Type=oneshot :这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
  5. Type=notify  :与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
  6. Type=dbus    :若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd 认为服务就绪。
  7. Type=idle    :systemd 会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。
复制代码
其他选项:
  1. ExecStart:     启动服务的命令
  2. ExecStartPre:  启动服务之前执行的命令
  3. ExecStartPost: 启动服务之后执行的命令
  4. ExecReload:    重启服务执行时的命令
  5. ExecStop:      停止服务时执行的命令
  6. ExecStopPost:  停止服务之后执行的命令
  7. RestartSec:    自动重启服务间隔的秒数
  8. Restart:       定义何种情况下会自动重启服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
  9. TimeoutSec:    定义Systemd停止服务之前等待的秒数
  10. Environment:   指定环境变量
  11. PIDFile:      pid文件路径
  12. PrivateTmp:   true表示给服务分配独立的临时空间
  13. User:         执行命令的用户
  14. Group:        执行命令的组
复制代码
3、[Install]区块
[Install]区块用来定义如何启动,以及是否开机启动。
  1. WantedBy:   它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名 + .wants后缀构成的子目录中
  2. RequiredBy: 它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名 + .required后缀构成的子目录中
  3. Alias:      当前Unit可用于启动的别名
  4. Also:       当前Unit激活时(enable),会被同时激活的其他Unit
复制代码
 
五、Target的概念
Target就是一个Unit组,包含许多相关Unit。启动某个Target的时候,Systemd就会启动里面所有的Unit。
传统init启动模式里面,有RunLevel的概念,跟Target的作用很类似。不同的是,RunLevel是互斥的,不可能多个RunLevel同时启动,但是多个Target可以同时启动。
Target的常用命令:
  1. 查看所有target下的unit
  2. systemctl list-unit-files --type=target
  3. 查看默认target,即默认的运行级别。对应于旧的`runlevel`命令
  4. systemctl get-default
  5. 设置默认的target
  6. systemctl set-default multi-user.target
  7. 查看target下的unit
  8. systemctl list-dependencies multi-user.target
  9. 切换target,不属于新target的unit都会被停止
  10. systemctl isolate multi-user.target
复制代码
 
六、自己配置一个
/lib/systemd/system/目录中定义一个自己的testserver.service文件
  1. [Unit]
  2. Description=testserver
  3. [Service]
  4. # 应用程序所在的文件目录
  5. WorkingDirectory=/usr/local/src/testserver/
  6. ExecStart=/usr/local/src/testserver/testserver
  7. Restart=always
  8. # 如果服务崩溃,10秒后重新启动服务
  9. RestartSec=10
  10. KillSignal=SIGINT
  11. SyslogIdentifier=testserver
  12. User=root
  13. # Production:生产环境 Development:开发环境
  14. # Environment=ASPNETCORE_ENVIRONMENT=Development
  15. [Install]
  16. WantedBy=multi-user.target  # 由此target触发自启动
复制代码
 
通过以下命令实现启动
  1. systemctl daemon-reload<br><br>// 自动启动
  2. systemctl enable testserver.service<br><br>//立即启动
  3. systemctl start testserver.service
  4. <br>//状态查看
  5. systemctl status testserver.service
复制代码
 
部分摘自
http://t.zoukankan.com/solohac-p-4154181.html
https://www.cnblogs.com/jkko123/p/12171572.html

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

笑看天下无敌手

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表