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

发布于 2022-09-11 23:58:20 字数 590 浏览 22 评论 0

问题描述

使用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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

耳根太软 2022-09-18 23:58:20

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

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

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

傲鸠 2022-09-18 23:58:20

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

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文