Shell-Script
如何為 shell 腳本創建服務,以便可以像守護程序一樣啟動和停止它?
我正在使用 CentOS 7,我的目標是每五秒鐘創建一個 cron,但據我研究,我們只能使用 cron 一分鐘,所以我現在正在做的是創建一個 shell 文件。
命中.sh
while sleep 5; do curl http://localhost/test.php; done
但我通過右鍵點擊它手動點擊它。
我想要的是為該文件創建一個服務,以便我可以自動啟動和停止它。
我找到了創建服務的腳本
#!/bin/bash # chkconfig: 2345 20 80 # description: Description comes here.... # Source function library. . /etc/init.d/functions start() { # code to start app comes here # example: daemon program_name & } stop() { # code to stop app comes here # example: killproc program_name } case "$1" in start) start ;; stop) stop ;; restart) stop start ;; status) # code to check status of app comes here # example: status program_name ;; *) echo "Usage: $0 {start|stop|status|restart}" esac exit 0
但是我不知道在 start 或 stop 方法中寫什麼我嘗試將相同的 hit.sh 內容放入其中,
start(){}
但它}
在 stop 方法中給出了錯誤。
嘗試在現代系統上將腳本作為守護程序執行的使用者應該使用
systemd
:[Unit] Description=hit service After=network-online.target [Service] ExecStart=/path/to/hit.sh [Install] WantedBy=multi-user.target
將此另存為
/etc/systemd/system/hit.service
,然後您將能夠使用systemctl start hit
等啟動/停止/啟用/禁用它。2015年的舊答案:
如果您想重用您的程式碼範例,它可能類似於:
#!/bin/bash case "$1" in start) /path/to/hit.sh & echo $!>/var/run/hit.pid ;; stop) kill `cat /var/run/hit.pid` rm /var/run/hit.pid ;; restart) $0 stop $0 start ;; status) if [ -e /var/run/hit.pid ]; then echo hit.sh is running, pid=`cat /var/run/hit.pid` else echo hit.sh is NOT running exit 1 fi ;; *) echo "Usage: $0 {start|stop|status|restart}" esac exit 0
當然,你想作為服務執行的腳本應該去 eg
/usr/local/bin/hit.sh
,上面的程式碼應該去/etc/init.d/hitservice
。對於需要執行此服務的每個執行級別,您將需要創建相應的符號連結。例如,一個名為的符號連結
/etc/init.d/rc5.d/S99hitservice
將為執行級別 5 啟動服務。當然,您仍然可以通過service hitservice start
/手動啟動和停止它service hitservice stop