crontab 未触发

crontab 未触发

我有一个用 OpenCV 用 C 语言编写的程序。它从网络摄像头捕获图像并使用作为参数给出的名称保存在磁盘上。我想每分钟触发一次,因此我将以下行插入到 crontab 中。

* * * * * /home/mustafa/Desktop/capture2/capture2 `date +\%y\%m\%d\%H\%M` >> /home/mustafa/Desktop/webcam.log

当我从控制台运行该命令时,该命令按预期运行。但它不是由 crontab 触发的。

我的 crontab 语法有错误吗?

编辑:这是 Angström Linux

答案1

有时脚本中的命令取决于运行用户的 PATH 环境变量。

尝试在这个 crontab 的开头添加 PATH 环境变量,这也可能是使用正确的 shell 的问题。特别是在实际的 debian 系统上,标准 shell /bin/sh 链接到 /bin/dash 而不是 /bin/bash。您可以使用脚本中正确的 shebang 来修复该问题,或者更改 crontab 进程的 SHELL env var:

  SHELL=/bin/bash
  PATH=<Path Var of The Running user>

另请man 5 crontab参阅进一步的描述。

答案2

为了专门为此 crontab 条目激活错误日志记录,您可以将错误重定向到文件。

* * * * * /home/mustafa/Desktop/capture2/capture2 `date +\%y\%m\%d\%H\%M` 1>>/home/mustafa/Desktop/webcam.log 2>>/home/mustafa/Desktop/error.log

1>>/home/mustafa/Desktop/webcam.log将脚本的输出附加到文件 webcam.log

2>>/home/mustafa/Desktop/error.log将脚本中的错误附加到文件 error.log

在从 crontab 执行脚本之前我们需要注意一些事情,

  • 具有执行脚本的 crontab 条目的用户应该有权访问脚本正在使用的所有文件,包括execute对脚本文件的权限。对于脚本正在写入/追加的文件,用户应该具有write权限。

  • 脚本文件中的所有路径都应该是绝对路径。最好在存储文件路径的脚本开头设置变量。

检查完以上两点后,尝试使用 crontab 执行脚本,并检查error.log文件是否有错误。根据出现的错误,您可以对脚本进行适当的更改。

答案3

正如建议的盖尔伦统一这个线程,尝试在 crontab 末尾添加新行。显然,某些 cron 实现不会在 crontab 中的最后一个换行符之后获取任何内容。我刚刚在 RedHat 6 机器上遇到了这个问题,现在我的所有作业都按预期运行。

相关内容