我正在使用 AWS EC2 实例上的 crontab 从网络上抓取大量数据。该脚本抓取了数千个网页并打印“网页编号每次执行完后,我都会在脚本中插入“done”一词。因为我正在安排脚本运行,然后退出实例,所以我使用 crontab 上的以下命令将 stdout 输出保存到日志文件中:
0 19 26 10 * /home/ec2-user/scrape.sh &>> /home/ec2-user/output.log
脚本在抓取 10,000 个网页后崩溃,但由于某种原因 output.log 停止打印“网页编号8,000 个网页之后,输出“完成”。output.log 中的最后几行如下所示:
7998: webpage 012345 done
7999: webpage 012346 done
8000: webpage 012347 d
因此它在中途停止打印,但脚本继续抓取另外 2000 个网页。为什么会发生这种情况?有没有更好的方法可以在退出 EC2 实例时保存输出(即不保持 SSH 管道打开)?
答案1
修复了你的 crontab
0 19 26 10 * /home/ec2-user/scrape.sh &>> /home/ec2-user/output.log 2>&1
另外,请注意,如果您的脚本在,Bash
那么不要忘记在您的cron
(如果您正在使用cron
)
SHELL=/bin/bash