我創建了一個程序,需要一系列命令列指令來獲取新資訊並更新資料庫。
有沒有一種方法可以自動化這個過程,這樣我就不必每次坐下來時都在終端中輸入所有這些內容?也許可以讓前 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 來鎖定/解鎖遊戲目錄。為此,請按照以下步驟操作。
確保 cron 守護程式已安裝
sudo apt-get install cron
設定 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 分鐘運行。