寶塔用 systemd 設定定時執行 .sh 檔案

strmsg發表於2022-02-16

前幾天做了一個用寶塔自帶計劃(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 # 啟動定時任務

示例:其他定時執行

  1. 在系統啟動15分鐘後啟動,並在系統執行時,每週啟動一次。

    [Unit]
    Description=Run foo weekly and on boot
    
    [Timer]
    OnBootSec=15min
    OnUnitActiveSec=1w 
    
    [Install]
    WantedBy=timers.target
    
  2. 每週執行一次(週一凌晨0點)。啟用後,如果錯過了上次啟動時間,,它會立即觸發服務,例如由於系統斷電:

    [Unit]
    Description=Run foo weekly
    
    [Timer]
    OnCalendar=weekly
    Persistent=true
    
    [Install]
    WantedBy=timers.target
    
  3. 每天週一下午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
    
  4. 每隔5秒執行一次

    [Unit]
    Description=Run timerecord  every 5s
    
    [Timer]
    OnUnitActiveSec=5s # 可以設定為 5m,1h
    Unit=timerecord
    
    [Install]
    WantedBy=timers.target
    
  5. 每個小時的每隔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 協議》,轉載必須註明作者和本文連結

相關文章