前幾天做了一個用寶塔自帶計劃(crontab) 來監控程式是否斷了然後自動拉起,後來看到評論區其他小夥幫推薦 systemd 來執行,畢竟藝不壓身,安排!
1.進入 /bin 目錄建立指令碼: vim swoole.sh
指令碼內容:
#!/bin/bash
while true
do
procnum=` ps -ef|grep "SwooleWebSocketServer2.php"|grep -v grep|wc -l`
if [ $procnum -eq 0 ];
then
echo `date`'正在啟動' >> /data/swoole.log #寫入日誌(這個註釋需要刪除不然會報錯)
/www/server/php/74/bin/php /www/wwwroot/tp6swoole/app/controller/SwooleWebSocketServer2.php
fi
echo `date`'系統正在執行中' >> /data/swoole.log #寫入日誌
sleep 30 #等待30秒,不然系統會卡死
done
2.進入 /etc/systemd/system,建立服務 vim swoole.service (如果沒寫入許可權執行:chmod +x swoole.sh )
//指令碼內容:
[Unit]
Description=swoole service
[Service]
ExecStart=/bin/swoole.sh #你的.sh檔案所在目錄(這個註釋需要刪除不然會報錯)
[Install]
WantedBy=multi-user.target
3.然後再同目錄建立執行定時檔案 vim swoole.timer (如果沒寫入許可權執行:chmod +x swoole.timer )
//指令碼內容:
[Unit]
Description=run swoole.sh every 10s
[Timer]
OnBootSec=10s #伺服器啟動後10秒自動執行(每次啟動伺服器後就不用再次輸入命令啟動指令碼了)
OnUnitActiveSec=1m #一分鐘執行一次(這個註釋需要刪除不然會報錯)
Unit=swoole.service
[Install]
WantedBy=multi-user.target
4.建立好了後 啟用定時任務
systemctl daemon-reload #重新載入配置
systemctl start swoole.timer # 啟動定時任務
示例:其他定時執行
在系統啟動15分鐘後啟動,並在系統執行時,每週啟動一次。
[Unit] Description=Run foo weekly and on boot [Timer] OnBootSec=15min OnUnitActiveSec=1w [Install] WantedBy=timers.target
每週執行一次(週一凌晨0點)。啟用後,如果錯過了上次啟動時間,,它會立即觸發服務,例如由於系統斷電:
[Unit] Description=Run foo weekly [Timer] OnCalendar=weekly Persistent=true [Install] WantedBy=timers.target
每天週一下午3點10分執行
如果需要具體的時間,我們可以給
OnCalendar
設定具體時間值,形如Year-Month-Day Hour:Minute:Second
[Unit] Description=Run timerecord on Monday 3:10 [Timer] OnCalendar=Mon *-*-* 15:10:00 Unit=timerecord [Install] WantedBy=timers.target
每隔5秒執行一次
[Unit] Description=Run timerecord every 5s [Timer] OnUnitActiveSec=5s # 可以設定為 5m,1h Unit=timerecord [Install] WantedBy=timers.target
每個小時的每隔10分鐘 進行備份服務
[Unit] Description=backup [Timer] OnCalendar=*-*-* 0/1:0/10:00 Unit=backup [Install] WantedBy=multi-user.target
常用命令:
systemctl start swoole.timer# 啟動定時任務
systemctl stop swoole.timer# 暫停定時任務
systemctl status swoole.timer# 檢視定時任務服務狀態
systemctl restart swoole.timer# 重啟定時任務狀態
systemctl list-timers --all # 檢視定時任務列表
systemctl daemon-reload # 更改了配置檔案後,需要重新載入
journalctl -u swoole.timer # 檢視 swoole.timer 的日誌
journalctl -u swoole # 檢視 swoole.timer 和 swoole.service 的日誌
journalctl -f # 從結尾開始檢視最新日誌
journalctl -f -u timer.timer # 從結尾開始檢視 swoole.timer 的日誌
本作品採用《CC 協議》,轉載必須註明作者和本文連結