編寫使用systemctl啟動服務腳本


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

1205 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

   

   

   

   

   

   

   

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM