3

CentOS6/7 配置守护进程 - chester·chen

 1 year ago
source link: https://www.cnblogs.com/chenyishi/p/16848621.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

正文

CentOS6.x

CentOS6中转用Upstrat代替以前的init.d/rcX.d的线性启动方式。

一、相关命令

通过initctl help可以查看相关命令

[root@localhost ~]# initctl help
Job commands:
  start                       Start job.
  stop                        Stop job.
  restart                     Restart job.
  reload                      Send HUP signal to job.
  status                      Query status of job.
  list                        List known jobs.

Event commands:
  emit                        Emit an event.

Other commands:
  reload-configuration        Reload the configuration of the init daemon.
  version                     Request the version of the init daemon.
  log-priority                Change the minimum priority of log messages from the init daemon
  usage                       Show job usage message if available.
  help                        display list of commands

For more information on a command, try `initctl COMMAND --help'.

二、自己配置一个

在/etc/init/文件夹中新建一个testserver.conf配置文件。

通过exec执行发布出来的程序可执行文件。通过设置respawn让程序反复启动。

start on runlevel [2345]
stop on runlevel [!2345]
respawn
exec /usr/local/src/testserver/testserver
initctl reload-configuration 
initctl list 
initctl start testserver

通过initctl list即可看程序是不是处于running启动状态。

[root@localhost ~]# initctl list
vmware-tools start/running
rc stop/waiting
tty (/dev/tty3) start/running, process 3024
tty (/dev/tty2) start/running, process 3022
tty (/dev/tty6) start/running, process 3033
tty (/dev/tty5) start/running, process 3028
tty (/dev/tty4) start/running, process 3026
plymouth-shutdown stop/waiting
testserver start/running, process 4157
control-alt-delete stop/waiting
rcS-emergency stop/waiting
readahead-collector stop/waiting
kexec-disable stop/waiting
quit-plymouth stop/waiting
rcS stop/waiting
prefdm start/running, process 3017
init-system-dbus stop/waiting
ck-log-system-restart stop/waiting
readahead stop/waiting
ck-log-system-start stop/waiting
splash-manager stop/waiting
start-ttys stop/waiting
readahead-disable-services stop/waiting
ck-log-system-stop stop/waiting
rcS-sulogin stop/waiting
serial stop/waiting

可以看到其处于启动状态,现在守护进程已经设置成功。

另外,配置文件中可以通过script ... end script执行脚本。举个例子

start on runlevel [2345]
stop on runlevel [!2345]
script 
echo “test~~~~~” >>/tmp/test.txt 
end script

CentOS7.x

Centos7中可以通过systemd配置守护进程。

一、Unit的含义

systemd可以管理所有系统资源,不同资源统称为 Unit,一共分为12种:

Service unit:   系统服务
Target unit:    多个unit构成一个组
Device unit:    硬件设备
Mount unit:     文件系统的挂载点
Automount unit: 自动挂载点
Path unit:      文件或路径
Scope unit:     不是由Systemd启动的外部进程
Slice unit:     进程组
Snapshot unit:  Systemd快照,可以切回某个快照
Socket unit:    进程间通信的socket
Swap unit:      swap文件
Timer unit:     定时器

二、Unit管理常用命令(主要针对service)

# 开机自启动
systemctl enable nginx

# 关闭自启动
systemctl disable nginx

# 服务状态
systemctl status nginx

# 服务重启
systemctl restart nginx

# 杀死一个服务
systemctl kill nginx

# 显示已启动的服务
systemctl list-units --type=service

三、Unit配置文件

每一个Unit都有一个配置文件,用于告诉系统如何启动Unit,systemd默认从 /etc/systemd/system/ 目录读取配置文件,

Unit配置文件目录主要有三个:

/lib/systemd/system
/run/systemd/system
/etc/systemd/system

四、Unit服务配置

每个服务以.service后缀,一般会分为3部分:[Unit],[Service],[Install],具体以nginx服务为例:

[Unit]
Description=nginx - high performance web server
After=network.target remote-fs.target nss-lookup.target
 
[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t -c /usr/local/nginx/conf/nginx.conf
ExecStart=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s stop
 
#Restart配置可以在进程被kill掉之后,让systemctl产生新的进程,避免服务挂掉
Restart=on-failure
RestartSec=30
 
[Install]
WantedBy=multi-user.target

1、[Unit]区块

[Unit]区块通常是配置文件的第一个区块,用来定义Unit的元数据,以及配置与其他Unit的关系。

Description: 简短描述
Documentation: 文档地址
After:依赖,仅当依赖的服务启动之后再启动自定义的服务单元

2、[Service]区块

[Service]区块用来Service的配置,只有service类型的unit才有本区块。

Type: 定义启动时的进程行为。它有以下几种值:

Type=simple  :(默认值) systemd认为该服务将立即启动。服务进程不会 fork 。如果该服务要启动其他服务,不要使用此类型启动,除非该服务是 socket 激活型。
Type=forking :systemd认为当该服务进程 fork,且父进程退出后服务启动成功。对于常规的守护进程(daemon),除非你确定此启动方式无法满足需求,使用此类型启动即可。
               使用此启动类型应同时指定 PIDFile=,以便 systemd 能够跟踪服务的主进程。
Type=oneshot :这一选项适用于只执行一项任务、随后立即退出的服务。可能需要同时设置 RemainAfterExit=yes 使得 systemd 在服务进程退出之后仍然认为服务处于激活状态。
Type=notify  :与 Type=simple 相同,但约定服务会在就绪后向 systemd 发送一个信号。这一通知的实现由 libsystemd-daemon.so 提供。
Type=dbus    :若以此方式启动,当指定的 BusName 出现在DBus系统总线上时,systemd 认为服务就绪。
Type=idle    :systemd 会等待所有任务处理完成后,才开始执行 idle 类型的单元。其他行为与 Type=simple 类似。

其他选项:

ExecStart:     启动服务的命令
ExecStartPre:  启动服务之前执行的命令
ExecStartPost: 启动服务之后执行的命令
ExecReload:    重启服务执行时的命令
ExecStop:      停止服务时执行的命令
ExecStopPost:  停止服务之后执行的命令
RestartSec:    自动重启服务间隔的秒数
Restart:       定义何种情况下会自动重启服务,可能的值包括always(总是重启)、on-success、on-failure、on-abnormal、on-abort、on-watchdog
TimeoutSec:    定义Systemd停止服务之前等待的秒数
Environment:   指定环境变量
PIDFile:      pid文件路径
PrivateTmp:   true表示给服务分配独立的临时空间
User:         执行命令的用户
Group:        执行命令的组

3、[Install]区块

[Install]区块用来定义如何启动,以及是否开机启动。

WantedBy:   它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名 + .wants后缀构成的子目录中
RequiredBy: 它的值是一个或多个Target,当前Unit激活时(enable)符号链接会放入/etc/systemd/system目录下面以Target名 + .required后缀构成的子目录中
Alias:      当前Unit可用于启动的别名
Also:       当前Unit激活时(enable),会被同时激活的其他Unit

五、Target的概念

Target就是一个Unit组,包含许多相关Unit。启动某个Target的时候,Systemd就会启动里面所有的Unit。

传统init启动模式里面,有RunLevel的概念,跟Target的作用很类似。不同的是,RunLevel是互斥的,不可能多个RunLevel同时启动,但是多个Target可以同时启动。

Target的常用命令:

查看所有target下的unit
systemctl list-unit-files --type=target
 
查看默认target,即默认的运行级别。对应于旧的`runlevel`命令
systemctl get-default
 
设置默认的target
systemctl set-default multi-user.target
 
查看target下的unit
systemctl list-dependencies multi-user.target
 
切换target,不属于新target的unit都会被停止
systemctl isolate multi-user.target

六、自己配置一个

/lib/systemd/system/目录中定义一个自己的testserver.service文件

[Unit]
Description=testserver

[Service]
# 应用程序所在的文件目录
WorkingDirectory=/usr/local/src/testserver/
ExecStart=/usr/local/src/testserver/testserver
Restart=always

# 如果服务崩溃,10秒后重新启动服务
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=testserver
User=root

# Production:生产环境 Development:开发环境
# Environment=ASPNETCORE_ENVIRONMENT=Development


[Install]
WantedBy=multi-user.target  # 由此target触发自启动

通过以下命令实现启动

systemctl daemon-reload

// 自动启动 systemctl enable testserver.service

//立即启动 systemctl start testserver.service
//状态查看 systemctl status testserver.service

http://t.zoukankan.com/solohac-p-4154181.html

https://www.cnblogs.com/jkko123/p/12171572.html

C#/.net/.net core QQ群:953553560

o_220321084757_%E5%85%AC%E4%BC%97%E5%8F%B7.png

                

o_220321084403_%E8%A7%86%E9%A2%91%E8%AF%BE%E7%A8%8B.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK