• 0
  • 新人请关照

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时,却是可以得到正常结果的。

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

阅读 847
评论
    2 个回答

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

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

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

      • 272

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

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

        撰写回答

        登录后参与交流、获取后续更新提醒