Crontab 运行时出现错误

Crontab 运行时出现错误

我正在尝试使用 crontab 以编程方式在我的服务器上运行一些 scrapy 蜘蛛。我尝试了几个命令,但最终这个 crontab 并未运行,也没有给出任何有用的错误。

#!/bin/bash
PATH=/root/
47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours

这个 crontab 不起作用,syslog我得到了这个:

Feb 13 09:47:01 d4bd CRON[18641]: (root) CMD (cd Travel/lastsecond && scrapy crawl tours)
Feb 13 09:47:01 d4bd CRON[18640]: (CRON) info (No MTA installed, discarding output)

在输出中,我得到了这个:

/bin/sh: 1: scrapy: not found

我已经安装了 scrapy 并且命令可以独立正常运行。

答案1

Cron 默认向用户发送一封邮件,其中包含它运行的命令的输出。但是,正如它所说,没有安装 MAT(邮件传输代理),因此 cron 无法发送邮件并丢弃命令输出。您可以自己将输出重定向到文件或空白处(/dev/null),方法是将 cron 行更改为:

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > outfile 2>&1

或者

47 9,22 * * * cd Travel/lastsecond && scrapy crawl tours > /dev/null 2>&1

第二种可能性是安装 MTA(sendmail、postfix 或类似的)——并将其配置为处理本地邮件。

或者您可以确保您的脚本不会产生任何输出。

答案2

scrapy无法在任何地方找到该文件PATH(见下文)。要查找其位置,请在交互式 shell 中使用以下命令:

which scrapy

它将显示其绝对路径,例如/usr/local/bin/scrapy。将绝对路径放入 crontab:

47 9,22 * * * cd Travel/lastsecond && /usr/local/bin/scrapy crawl tours

关于PATH变量

PATH当您未在命令行或脚本中指定确切路径时,将使用变量来搜索程序。它由配置文件设置和 crontabs 定义。它通常看起来像:

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

该示例来自我的/etc/crontab。但是,您在 crontab 中提供的值看起来不寻常……

PATH=/root/

你不是想设定工作目录这里?!

关于shebang

舍邦是许多脚本的第一行。它指定哪个解释器将解释该文件。它在 crontab 中毫无意义,您应该将其删除。Crontab 是一个数据Cron 文件,而不是脚本。

相关内容