CentOS 7的服务systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,还是存在系统服务里吧,即:/usr/lib/systemd/system目录下
[Unit]
Description=MonitorJSCloud
After=network.service
[Service]
Type=simple
ExecStart=/usr/bin/python/root/test/ping_test.py
Restart=always
RestartSec=10
PrivateTmp=true
[Install]
WantedBy=multi-user.target
对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件。
systemctl enable httpd
上面的命令相当于在 /etc/systemd/system 目录添加一个符号链接,指向 /usr/lib/systemd/system 里面的 httpd.service 文件。
这是因为开机时, Systemd 只执行 /etc/systemd/system 目录里面的配置文件。这也意味着,如果把修改后的配置文件放在该目录,就可以达到覆盖原始配置的效果。
$ sudo systemctl status httpd
httpd.service - The Apache HTTP Server
Loaded:(/usr/lib/systemd/system/httpd.service;)
Active:(running) since 金 2014-12-05 12:18:22; 7min ago
Main PID: 4349 (httpd)
Status: "Total requests: 1; Current requests/sec: 0; Current traffic: 0 B/sec"
CGroup: /system.slice/httpd.service
├─4349 /usr/sbin/httpd -DFOREGROUND
├─4350 /usr/sbin/httpd -DFOREGROUND
├─4351 /usr/sbin/httpd -DFOREGROUND
├─4352 /usr/sbin/httpd -DFOREGROUND
├─4353 /usr/sbin/httpd -DFOREGROUND
└─4354 /usr/sbin/httpd -DFOREGROUND12月 05 12:18:22.localdomain systemd[1]:...
12月 05 12:18:22.localdomain systemd[1]:.
12月 05 12:22:40.localdomain systemd[1]:.
Loaded行: | 配置文件的位置,是否设为开机启动 |
Active行: | 表示正在运行 |
Main PID行: | 主进程ID |
Status行: | 由应用本身(这里是 httpd )提供的软件当前状态 |
CGroup块: | 应用的所有子进程 |
日志块: | 应用的日志 |
$ systemctl cat sshd.service
查看配置文件
配置文件详解
Unit |
|
|
After | 表示服务需要在***服务启动之后执行 | 无依赖 |
Before | 表示服务需要在***服务启动之前执行 | 无依赖 |
Wants | 弱依赖关系 |
|
Requires | 强依赖关系 | ***停止之后本服务也必须停止 |
Service |
|
|
EnvironmentFile | 环境参数文件 | EnvironmentFile=/etc/sysconfig/sshd 以key=value的形式保存 以$key形式读取 |
ExecStart | 启动进程时执行的命令 |
|
ExecReload | 重启服务时执行的命令 |
|
ExecStop | 停止服务时执行的命令 |
|
ExecStartPre | 启动服务之前执行的命令 |
|
ExecStartPost | 启动服务之后执行的命令 |
|
ExecStopPost | 停止服务之后执行的命令 |
|
所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。比如,EnvironmentFile=-/etc/sysconfig/sshd(注意等号后面的那个连词号),就表示即使/etc/sysconfig/sshd文件不存在,也不会抛出错误。
Type |
|
simple(默认值): | ExecStart字段启动的进程为主进程 |
forking: | ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程 |
oneshot: | 类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务 |
dbus: | 类似于simple,但会等待 D-Bus 信号后启动 |
notify: | 类似于simple,启动结束后会发出通知信号,然后 Systemd 再启动其他服务 |
idle: | 类似于simple,但是要等到其他任务都执行完,才会启动该服务。一种使用场合是为让该服务的输出,不与其他服务的输出相混合 |
KillMode |
|
control-group(默认值): | 当前控制组里面的所有子进程,都会被杀掉 |
process: | 只杀主进程 |
mixed: | 主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号 |
none: | 没有进程会被杀掉,只是执行服务的 stop 命令。 |
Restart |
|
no(默认值): | 退出后不会重启 |
on-success: | 只有正常退出时(退出状态码为0),才会重启 |
on-failure: | 非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启 |
on-abnormal: | 只有被信号终止和超时,才会重启 |
on-abort: | 只有在收到没有捕捉到的信号终止时,才会重启 |
on-watchdog: | 超时退出,才会重启 |
always: | 不管是什么退出原因,总是重启 |
修改配置文件以后,需要重新加载配置文件,然后重新启动相关服务。
# 重新加载配置文件
$ systemctl daemon-reload