如何編寫重複的 bash 腳本

如何編寫重複的 bash 腳本

我創建了一個程序,需要一系列命令列指令來獲取新資訊並更新資料庫。

有沒有一種方法可以自動化這個過程,這樣我就不必每次坐下來時都在終端中輸入所有這些內容?也許可以讓前 3 個步驟每小時運行一次,第 4 步在凌晨 2 點運行,因為它可能需要很長時間才能完成。

步驟1:在終端機中:

...Documents/dota2/dotaapi2/ python match_scraper.py 

第2步:在航廈內

 psql dota2apidb
 update games set online=1 where online is null;

步驟3:在終端機中:

...Documents/dota2/gosugamers/gosugamers/spiders/ scrapy crawl dota

步驟4:在終端機中:(僅在凌晨 2 點執行一次)

...Documents/dota2/dotaapi2/ python gosu_merge.py

...Documents/dota2/dotaapi2/ python unticketed.py

答案1

一種解決方案是設定 cronjobs 來鎖定/解鎖遊戲目錄。為此,請按照以下步驟操作。

  1. 確保 cron 守護程式已安裝

    sudo apt-get install cron
    
  2. 設定 cronjob 以 root 身分執行

發出以下命令開始編輯 cronjob:

sudo crontab -e

將以下行加入編輯器:

00 */1 * * * ...Documents/dota2/dotaapi2/ python match_scraper.py
01 */1 * * * psql dota2apidb
02 */1 * * * update games set online=1 where online is null;
03 */1 * * * ...Documents/dota2/gosugamers/gosugamers/spiders/ scrapy crawl dota
04 02 * * * ...Documents/dota2/dotaapi2/ python gosu_merge.py
05 02 * * * ...Documents/dota2/dotaapi2/ python unticketed.py

(只是為了明確你必須使用正確的命令和路徑,也許將其中一些放入準備好的 bash 腳本中,這樣你就可以減少運行的 cron 數量)

答案2

將步驟 1,2,3 放入 script1.sh 將步驟 4 放入 script2.sh

然後設定計劃任務讓適當的用戶根據您的計劃執行腳本:

minute (0-59), hour (0-23, 0 = midnight), day (1-31), month (1-12), weekday (0-6, 0 = Sunday), command

    01 * * * * /usr/bin/directory/script1.sh
    30 2 * * * /usr/bin/directory/script2.sh

script1.sh 將在每天每小時的 01 分鐘執行,而 script2.sh 將在每天 0200 小時的 30 分鐘運行。

相關內容