如何编写循环 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-daemon

    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 则会在每天 02:00 时 30 分运行。

相关内容