crontab to 运行 owncloudcmd on raspberry pi with rasbian 不工作

crontab to run owncloudcmd on raspberry pi with rasbian does not work

我正在使用带有 Raspbian 和 owncloudcmd 的 Raspberry 2。 运行 owncloudcmd 我创建了 /home/pi/owncloud.sh #!/bin/sh owncloudcmd --non-interactive -n /home/pi/Pictures/picpreview/ http://my_owncloud_server.de/remote.php/webdav/picpreview

当我手动启动它时 (sh owncloud.sh) 一切都按预期工作。但是当我像这样创建一个 crontab -e 时:

# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# ...
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command

*/1 * * * * /home/pi/Pictures/preview.sh
*/1 * * * * /home/pi/owncloud.sh

另一个文件 /home/pi/Pictures/preview.sh 看起来像这样:

NOW=$(date +"%Y-%m-%d_%H-%M")
raspistill -q 50 -awb cloud -sh 40 -co 50 -o ~/Pictures/picpreview/$NOW.jpg
convert ~/Pictures/picpreview/$NOW.jpg[1296x972] ~/Pictures/picpreview/$NOW.jpg

picpreview中的图片没有同步到owncloud。我已经执行了 chmod -x 并且我在 cron 中还有另一个 sh 脚本可以正常工作(用于拍摄图像的脚本)。我也尝试将 crontab 设置为 sudo -i 但这里的结果相同(而且我认为 运行 这不是 sudo 所必需的)

preview.sh -> 有效 owncloud.sh -> 不工作

有谁知道我在 owncloud.sh 上做错了什么?

听起来脚本(或它使用的某些命令)依赖于一些环境变量,这些环境变量是在您 运行 在命令提示符下设置的,但在 运行通过 cron.

Cron 默认情况下倾向于 运行 具有极小环境的东西 - 您可以尝试在 crontab 运行 中添加一个新行命令 "env > ~/cronenv.txt" 以查看环境包含。希望这能让你看到你需要什么。

更新:

如果您需要设置环境变量,您可以在 crontab 的顶部附近添加一行 "NAME=value",或者您可以将这些声明放在您想要的命令的开头运行.

例如,在这种情况下,您可以使用声明 "PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/home/pi/dev/owncloud/client-build/bin/"

请注意,并非所有 cron 变体都支持第一种形式(文件顶部的单独一行),尤其是 Arch Linux 和 RedHat 似乎使用了不喜欢这种形式的变体。在这种情况下,您仍然可以使用第二种形式,尽管这意味着您必须为每个需要它的命令重复环境声明。

好的,就是这样,我不得不用它的完整路径替换 owncloudcmd,如下所示:

#!/bin/sh
owncloudcmd --non-interactive -n /home/pi/Pictures/picpreview/ http://my_owncloud_server.de/remote.php/webdav/picpreview

进入这个:

#!/bin/sh
/home/pi/dev/owncloud/client-build/bin/owncloudcmd --non-interactive -n /home/pi/Pictures/picpreview/ http://my_owncloud_server.de/remote.php/webdav/picpreview