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: loaded (/usr/lib/systemd/system/httpd.service; enabled)
Active: active (running) since 金 2014-12-05 12:18:22 JST; 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 -DFOREGROUND
12月 05 12:18:22 localhost.localdomain systemd[1]: Starting The Apache HTTP Server...
12月 05 12:18:22 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
12月 05 12:22:40 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
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