crontab执行Node.js脚本和直接执行的结果不同。

新手上路,请多包涵

问题描述

使用Node.js的Puppeteer写了一个爬取网站数据的脚本。
并将执行该脚本的命令写入了CentOS的Shell脚本,代码如下:

cd /home/timleaf/WebScrape && /usr/bin/node reins.js &> crontab.log

然后将Shell脚本,写入crontab,定期执行。

# Web Scraping
30 6 * * * /home/timleaf/WebScrape/scrape.sh

你期待的结果是什么?实际看到的错误信息又是什么?

可以从log中看到,scrape.sh被执行了。
但,不仅是crontab.log中是空的,保存的爬取数据也一样是空的。
而我单独在终端里执行cd /home/timleaf/WebScrape && /usr/bin/node reins.js &> crontab.log时,却是可以得到正常结果的。

这个问题,我应该从哪里排查。烦请各位指教一下。

阅读 5.4k
2 个回答

scrape.sh 这个脚本开头是否加了 #!/bin/bash 这一句? 或者说,在终端正常执行的时候,运行的是什么 shell,是否需要设置什么环境变量?

crontab 默认使用 /bin/sh 来执行命令,默认的 PATH 是 "/usr/bin:/bin",它的执行环境和终端不一定一样。
可以在脚本开头通过 #! 指定可以正常执行的解释器,看看是否可以生效。

也可以在 crontab 文件添加 SHELL=/bin/bash 这一行来指定用 bash 来执行,之后再写具体的定时任务。

你手动执行 这个 shell, 看看执行效果就知道了,有问题会有报错可以看到。
还有注意当前执行用户。

30 6 * /home/timleaf/WebScrape/scrape.sh > /user/local/a.log
将日志写到文件可以看到效果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题