我有一个用 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
文件是否有错误。根据出现的错误,您可以对脚本进行适当的更改。