Cron 脚本命令失败

Cron 脚本命令失败

我正在尝试使用网络摄像头拍摄一张照片,我需要记录输出以检查错误,但 cron 无法做到这一点。我可以从终端执行此操作,但 cron 运行它不起作用。

脚本如下:

/bin/bash #!/bin/bash
脚本 -ac“fswebcam -c /home/webcam/webcam.conf”/data/webcam/logscript.txt

计划任务:

@reboot mv /home/webcam/tmp/* /home/webcam/tmp_lost/
* * * * * sh /data/webcam/script.sh > /data/webcam/log.txt 2>&1

终端输出:

[webcam@raspberry-pi 网络摄像头]$ sh /data/webcam/script.sh
脚本已启动,文件为 /data/webcam/logscript.txt
--- 打开 V4L2:/dev/video0...
/dev/video0 已打开。
将亮度设置为 0 (50%)。
将对比度设置为 19 (20%)。
--- 捕获帧...
跳过 50 帧...
等待帧超时!
正在捕获 1 帧...
等待帧超时!
0.00 秒内捕获帧。
未捕获任何帧。
脚本完成,文件为 /data/webcam/logscript.txt

从终端运行时,logscript.txt(由脚本命令生成):

[webcam@raspberry-pi 网络摄像头]$ cat logscript.txt
脚本于 2013 年 10 月 21 日 21.10.52 开始运行
--- 打开 V4L2:/dev/video0...
/dev/video0 已打开。
将亮度设置为 0 (50%)。
将对比度设置为 19 (20%)。
--- 捕获帧...
跳过 50 帧...
正在捕获 1 帧...
gd-jpeg:JPEG 库报告不可恢复的错误:不是 JPEG 文件:以 0xba 0x28 开头
3.91 秒内捕获 51 帧。(13 fps)
--- 处理捕获的图像...
水平翻转图像。
垂直翻转图像。
将横幅置于底部。
将横幅背景颜色设置为#FF000000。
将横幅线颜色设置为#FF000000。
将横幅文本颜色设置为#FFFF00。
将字体设置为 luxisr:12。
设置时间戳“%d.%m.%Y %H:%M”。
将 JPEG 图像写入‘/home/webcam/tmp.jpg’。

脚本完成于 2013 年 10 月 21 日 21.10.57

通过 cron 运行。Cron 输出 -> log.txt

[webcam@raspberry-pi 网络摄像头]$ cat log.txt
脚本已启动,文件为 /data/webcam/logscript.txt
脚本完成,文件为 /data/webcam/logscript.txt
--- 打开 V4L2:/dev/video0...
/dev/video0 已打开。
将亮度设置为 0 (50%)。
将对比度设置为 19 (20%)。
--- 捕获帧...
跳过 50 帧...
正在捕获 1 帧...
gd-jpeg:JPEG 库报告不可恢复的错误:不是 JPEG 文件:以 0x8e 0x80 开头
3.38 秒内捕获 51 帧。(15 fps)
--- 处理捕获的图像...
水平翻转图像。
垂直翻转图像。
将横幅置于底部。
将横幅背景颜色设置为#FF000000。
将横幅线颜色设置为#FF000000。
将横幅文本颜色设置为#FFFF00。
将字体设置为 luxisr:12。
设置时间戳“%d.%m.%Y %H:%M”。
将 JPEG 图像写入‘/home/webcam/tmp.jpg’。
脚本已启动,文件为 /data/webcam/logscript.txt

cron 之后 logscript.txt 文件为空,这就是问题所在。如您所见:从 cron 运行时,脚本命令在任何输出发生之前启动并完成。在终端中一切正常。有人知道为什么会发生这种情况吗?

答案1

当被调用时sh /data/webcam/script.sh > /data/webcam/log.txt 2>&1,sh 将解释/data/webcam/script.sh为一个命令文件,并将其他所有内容解释为它的参数——可能还包括重定向运算符。

强制sh解释'/data/webcam/script.sh > /data/webcam/log.txt 2>&1'为命令:

sh -c '/data/webcam/script.sh > /data/webcam/log.txt 2>&1'

相关内容