CentOS7.5下開發systemctl管理的自定義Rsync啟動服務程序
阿新 • • 發佈:2018-08-07
mil family openssh sync start created emctl 級別 keygen CentOS7.5下開發systemctl管理的自定義Rsync啟動服務程序 /usr/lib/systemd/system目錄,每一個服務以“服務名.service”結尾,該文件的內容一般分為3部分:即[Unit]、[Service]和[Install],
1.1 systemctl知識簡介
從CentOS7 Linux開始,系統裏的網絡服務啟動已經從傳統的service改成了systemctl(一個systemd工具,主要負責控制systemd系統和服務管理器。),管理開機自啟動的命令也從chkconfig改為了systemctl,由systemctl一個命令代替了CentOS7以前系統中的service和chkconfig兩個命令。
系統服務的腳本也從傳統的路徑的/etc/init.d(/etc/rc.d/init.d/),改到了/usr/lib/systemd(除此之外還有/etc/systemd/system),需要自啟動運行的程序,一般存在這個系統服務目錄下,即:
1.2 systemctl管理的sshd服務配置介紹
下面是系統中sshd服務配置及解釋說明。
[root@oldboy ~]# cat /usr/lib/systemd/system/sshd.service [Unit] #<==對該系統服務描述及說明模塊。 Description=OpenSSH server daemon #<==描述性說明。 Documentation=man:sshd(8) man:sshd_config(5) #<==文檔列表說明。 After=network.target sshd-keygen.service #<==服務依賴類別說明。 Wants=sshd-keygen.service #<==可選的依賴服務。 [Service] #<==系統服務的運行參數設置模塊 Type=notify #<==服務類型,可選有forking、notify、simple等。 EnvironmentFile=/etc/sysconfig/sshd #<==環境變量等的配置文件。 ExecStart=/usr/sbin/sshd -D $OPTIONS #<==服務的啟動程序。 ExecReload=/bin/kill -HUP $MAINPID #<==重啟程序。 KillMode=process Restart=on-failure RestartSec=42s [Install] #<==服務安裝的相關設置。 WantedBy=multi-user.target #<==這裏為設置多用戶級別。可為空格分隔的列表, 表示在使用 systemctl enable 啟用此單元時, 將會在對應的目錄設置對應文件的軟連接。 更多說明,可參考systemd.unit、system.service文檔,此不細述,都掌握了意義也不大,可以寫出啟動腳本即可。
1.3 systemctl管理的rsyncd_oldboy服務配置說明
下面是我們人為配置的rsyncd服務配置及詳細解釋說明,因為系統裏已經配置好了rsyncd.service,因此這裏使用rsyncd_oldboy.service以區別。
[root@oldboy ~]# cat /usr/lib/systemd/system/rsyncd_oldboy.service [Unit] Description=Rsync service After=network.target [Service] Type=forking #<==後臺運行。 PIDFile=/var/run/rsyncd.pid #<==PID路徑。 ExecStart=/etc/rc.d/init.d/rsyncd start #<==兼容CentOS6的啟動服務腳本,介紹在下文。 ExecReload=/etc/rc.d/init.d/rsyncd restart #<==兼容CentOS6的重啟服務腳本,介紹在下文。 ExecStop=/etc/rc.d/init.d/rsyncd stop #<==兼容CentOS6的停止服務腳本,介紹在下文。 PrivateTmp=true #<==開啟獨立的空間。 [Install] WantedBy=multi-user.target #<==這裏為設置多用戶級別。 特別說明:本文僅僅使用rsync服務為例進行示例,對於系統沒有的服務可以這樣完成利用systemctl管理,但其實rsync服務系統已經早就配置好了,很簡單簡潔。 [root@oldboy ~]# cat /usr/lib/systemd/system/rsyncd.service [Unit] Description=fast remote file copy program daemon ConditionPathExists=/etc/rsyncd.conf [Service] EnvironmentFile=/etc/sysconfig/rsyncd ExecStart=/usr/bin/rsync --daemon --no-detach "$OPTIONS" [Install] WantedBy=multi-user.target
1.4 Centos6下的rsync專業啟動腳本
下面是Centos6下的rsync專業啟動腳本,在/usr/lib/systemd/system/rsyncd_oldboy.service裏面會使用這個腳本。
[root@oldboy ~]# cat /etc/rc.d/init.d/rsyncd #!/bin/bash # chkconfig: 2345 21 81 # description: rsync service start and stop scripts # Author: oldboy # Organization: www.oldboyedu.com [ -f /etc/rc.d/init.d/functions ] && source /etc/rc.d/init.d/functions lockdir='/var/lock/subsys' lock_file_path="$lockdir/rsync" rsyncd_pid_file_path="/var/run/rsyncd.pid" #成功提示函數 log_success_msg(){ #action為特殊的提示函數,$@為所有參數。 action "SUCCESS! $@" /bin/true } #失敗提示函數 log_failure_msg(){ action "ERROR! $@" /bin/false } start(){ rsync --daemon &>/dev/null retval=$? if [ $retval -eq 0 ] then log_success_msg "Rsyncd is started." if test -w "$lockdir" #判斷鎖目錄是否可寫。 then touch "$lock_file_path" #創建鎖文件。 return $retval else log_failure_msg "Rsync lockfile denied" #調用失敗函數提示。 return 1 fi else echo "Rsyncd startup fail." return 1 fi } stop(){ if test -s "$rsyncd_pid_file_path" then #讀取pidfile rsyncd_pid=`cat "$rsyncd_pid_file_path"` if (kill -0 $rsyncd_pid 2>/dev/null) then kill $rsyncd_pid retval=$? if [ $retval -eq 0 ] then log_success_msg "Rsync Stop" #調用停止成功函數。 if test -f "$lock_file_path" then rm "$lock_file_path" #刪除鎖文件。 fi return $retval else log_failure_msg "Rsyncd Stop." return $retval fi else log_failure_msg "rsync server_pid's process is not running!" rm "$rsyncd_pid_file_path" fi else log_failure_msg "Rsync server PID file is null or not exist!" return 1 fi } case "$1" in start) start retval=$? ;; stop) stop retval=$? ;; restart) stop sleep 2 start retval=$? ;; *) echo $"Usage:$0 {start|stop|restart}" exit 1 esac exit $retval
1.5 配置開機自啟動以及實現systemctl管理rsync服務
1、設置開機自啟動
[root@oldboy ~]# systemctl enable rsyncd_oldboy.service Created symlink from /etc/systemd/system/multi-user.target.wants/rsyncd_oldboy.service to /usr/lib/systemd/system/rsyncd_oldboy.service.
2、查看設置狀態
[root@oldboy ~]# systemctl status rsyncd_oldboy.service rsyncd_oldboy.service - Rsync service Loaded: loaded (/usr/lib/systemd/system/rsyncd_oldboy.service; enabled; vendor preset: disabled) Active: inactive (dead) [root@oldboy ~]# systemctl is-enabled rsyncd_oldboy.service enabled
3、使用systemctl啟動rsync並查看狀態
[root@oldboy ~]# systemctl start rsyncd_oldboy.service [root@oldboy ~]# systemctl status rsyncd_oldboy.service ● rsyncd_oldboy.service - Rsync service Loaded: loaded (/usr/lib/systemd/system/rsyncd_oldboy.service; enabled; vendor preset: disabled) Active: active (running) since 二 2018-08-07 18:56:06 CST; 23s ago Process: 1586 ExecStart=/etc/rc.d/init.d/rsyncd start (code=exited, status=0/SUCCESS) Main PID: 1590 (rsync) CGroup: /system.slice/rsyncd_oldboy.service └─1590 rsync --daemon 8月 07 18:56:06 oldboy systemd[1]: Starting Rsync service... 8月 07 18:56:06 oldboy rsyncd[1590]: rsyncd version 3.1.2 starting, listening on port 873 8月 07 18:56:06 oldboy rsyncd[1586]: SUCCESS! Rsyncd is started. [ 確定 ] 8月 07 18:56:06 oldboy systemd[1]: Started Rsync service.
4、使用lsof檢查真實服務狀態
[root@oldboy ~]# lsof -i :873 #<==需要yum install lsof -y。 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME rsync 1590 root 4u IPv4 25765 0t0 TCP *:rsync (LISTEN) rsync 1590 root 5u IPv6 25766 0t0 TCP *:rsync (LISTEN)
5、使用systemctl停止rsync並查看狀態
[root@oldboy ~]# systemctl stop rsyncd_oldboy.service [root@oldboy ~]# lsof -i :873
6、使用systemctl取消rsync開機自啟動並查看狀態
[root@oldboy ~]# systemctl disable rsyncd_oldboy Removed symlink /etc/systemd/system/multi-user.target.wants/rsyncd_oldboy.service. [root@oldboy ~]# systemctl is-enabled rsyncd disabled
通過以上的實踐,我們看到已經可以使用systemctl替代了傳統的service和chkconfig,如果你看懂了,就趕緊實踐吧。
CentOS7.5下開發systemctl管理的自定義Rsync啟動服務程序