1. 程式人生 > >設定定時執行任務

設定定時執行任務

  本篇主要介紹如何在Linux和Windows上分別建立定時執行任務。

Linux篇

  Linux下建立定時執行任務可使用crontab,系統預設自帶crontab,在Ubuntu 16.04下進行演示說明。

1.crontab 基本使用

#/etc/init.d/cron status        # 檢視狀態
#/etc/init.d/cron start         # 啟動crontab服務
#/etc/init.d/cron stop          # 停止crontab服務
#/etc/init.d/cron reload        # 過載定時任務
#crontab -l                     # 檢視定時任務列表

2.開啟日誌

  需修改配置檔案。

#sudo vim /etc/rsyslog.d/50-default.conf

...
cron.* /var/log/cron.log                             #將cron前面的註釋符去掉

...

  重啟rsyslog:

#sudo service rsyslog restart

3.設定定時執行任務

  本次演示定時執行自己寫的一個Python指令碼,bash指令碼或其它的應該也是類似。需要注意的是,最好指定指令碼的絕對路徑,如果發現仍無法解決,可先切換到指令碼路徑下執行。不過,應該是OK的。

  ...
  0 0 * * * python /home/kdv/Desktop/sync-opensource/sync.py    # 每天定時執行指令碼
  or
  @daily cd /home/kdv/Desktop/sync-opensource;python /home/kdv/Desktop/sync-opensource/sync.py

  0 0 1 * mon python /home/kdv/Desktop/sync-opensource/sync.py   # 每週定時執行指令碼
  or
  @weekly cd /home/kdv/Desktop/sync-opensource;python /home/kdv/Desktop/sync-opensource/sync.py

  按需要設定每天or每週定時執行,更多請參考連結中的內容。

  設定好任務之後,我們可以檢視下任務列表,並需要過載任務。

#crontab -l                   # 可以檢視我們新增的任務
#/etc/init.d/cron reload      # 過載定時任務
#vim /var/log/cron.log        # 檢視定時任務產生的日誌

4.測試

  圖中是每5分鐘執行指令碼為例進行測試。

  左側:指令碼在執行過程中,會生成以當前時間命名的日誌檔案,記錄指令碼在執行過程中的輸出結果。

  右側:crontab的日誌檔案,可以看到,每5分鐘,會定時執行一次指令碼。

 Windows篇

   Windows系統沒有crontab命令,但是Windows系統有跟crontab命令比較接近的命令:schtasks 命令。在Win10上操作。

1.幫助文件

  使用如下命令檢視schtasks的幫助文件,以便更多的瞭解該命令。

C:\Users\Administrator>schtasks /?
SCHTASKS /parameter [arguments]
描述:
    允許管理員建立、刪除、查詢、更改、執行和中止本地或遠端系統上的計劃任
    務。
引數列表:
    /Create         建立新計劃任務。
    /Delete         刪除計劃任務。
    /Query          顯示所有計劃任務。
    /Change         更改計劃任務屬性。
    /Run            按需執行計劃任務。
    /End            中止當前正在執行的計劃任務。
    /ShowSid        顯示與計劃的任務名稱相應的安全識別符號。
    /?              顯示此幫助訊息。
Examples:
    SCHTASKS
    SCHTASKS /?
    SCHTASKS /Run /?
    SCHTASKS /End /?
    SCHTASKS /Create /?
    SCHTASKS /Delete /?
    SCHTASKS /Query  /?
    SCHTASKS /Change /?
    SCHTASKS /ShowSid /?

  我們可以建立、查詢、更改和刪除任務等,如果對相應的子命令不熟悉的話,如建立命令,可使用SCHTASKS /Create /? 來進一步檢視詳細的說明介紹。

2.檢視系統預設任務

  使用schtasks 命令,或帶query引數,schtasks /query查詢系統當前執行任務。

C:\Users\Administrator>schtasks

資料夾: \
任務名                                   下次執行時間           模式
======================================== ====================== ===============
Adobe Acrobat Update Task                2019/9/2 11:00:00      就緒
SogouImeMgr                              N/A                    就緒
sync-opensource                          2019/9/2 11:30:00      就緒
WpsUpdateTask_Administrator              2019/9/2 9:23:46       就緒
...

3.建立定時執行任務

  命令列下鍵入schtasks /create /?,檢視更為詳細的引數說明,僅列舉我們最為關心的幾個引數。

/TN taskname 以路徑\名稱形式指定對此計劃任務進行唯一標識的字串。
/TR taskrun 指定在這個計劃時間執行的程式的路徑和檔名。
    例如: C:\windows\system32\calc.exe
/SC schedule 指定計劃頻率。
    ==> 建立計劃任務“EventLog”以開始執行 wevtvwr.msc
    SCHTASKS /Create /TN EventLog /TR wevtvwr.msc /SC ONEVENT
    如每分鐘、每小時、每天、每星期
      MINUTE: 1 到 1439 分鐘;
      HOURLY: 1 - 23 小時;
      DAILY: 1 到 365 天;
      WEEKLY: 1 到 52 周;
/ST starttime 指定執行任務的開始時間。
  時間格式為 HH:mm (24 小時時間),例如 14:30 表示2:30 PM。如果未指定 /ST,則預設值為當前時間。/SC ONCE 必需有此選項。

3.1建立任務

  我們建立一個名為"sync-opensource",定期執行某個bat指令碼,在每天的11:30執行。建立該任務的命令如下。

schtasks /create /tn "sync-opensource" /tr "E:\PycharmProjects\opensource\sync.bat" /sc daily /st 11:30

4其它

4.1查詢指定任務

  如查詢我們上面建立的sync-opensource任務。

C:\Users\Administrator>schtasks -query | find "sync-opensource"
sync-opensource                          2019/9/2 11:30:00      就緒

4.2刪除任務

  可以使用如下命令,刪除指定的任務。

schtasks /delete /tr taskname

  更多,請參考幫助文件。以上! 

參考

https://tecadmin.net/crontab-in-linux-with-20-examples-of-cron-schedule/

https://www.cnblogs.com/peida/archive/2013/01/08/2850483.html

https://www.cnblogs.com/SZxiaochun/p/6370702.