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
时,却是可以得到正常结果的。
这个问题,我应该从哪里排查。烦请各位指教一下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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
将日志写到文件可以看到效果