![如何编写循环 Bash 脚本](https://linux22.com/image/881567/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%E5%BE%AA%E7%8E%AF%20Bash%20%E8%84%9A%E6%9C%AC.png)
我创建了一个程序,它需要一系列命令行指令来抓取新信息并更新数据库。
有没有办法让这个过程自动化,这样我就不必每次坐下来时都在终端上输入所有这些内容?也许可以这样,前 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-daemon
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 则会在每天 02:00 时 30 分运行。