为CRON分配环境variables

我有一个.sh脚本创build.tar.gz文件,并使用RSA密钥将其传输到远程服务器进行身份validation。

脚本将从terminal运行,但是当我尝试将其设置为Cron作业时,脚本将不会运行。

我收到来自Cron Daemon的电子邮件,声明此失败:“ /bin/sh: /home/backup.sh: Permission denied ”,并且该文件未传输到其他服务器。

我从这个askubuntupost中确定了最可能的原因, 这很可能是由于“ Cron ”将一组最小的环境variables传递给了你的工作。

修复似乎是包括的

 #!/bin/bash PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # rest of script follows 

任何帮助如何configuration这将是非常明显的。

我正在运行的Ubuntu Server 11.04

编辑: ls -la backup.sh给出-rw-r--r-- 1 root root 1053 2012-10-13 15:08 backup.sh

感谢ls输出。 似乎cron对文件没有正确权限的抱怨可以采取面值(具体来说,它没有执行权限); 尝试做chmod 755 ./home/backup.sh ,看看是否有帮助。

编辑 :我很高兴我们得到整理。 您应该首先查看哪个用户正在运行此作业,在cron下,检查backupdir目录的所有权。 用户需要有权限写入该目录; 一味地chmod丁事情不会帮助。

“Permission denied”(拒绝权限)消息似乎暗示用户正在运行脚本,因为没有适当的权限来访问脚本/home/backup.sh

检查是否正在使用crontab的用户至less在/ home和backup.sh上有rx

你可以在crontab中设置你喜欢的任何环境variables。 一种方法是以格式在crontab文件中放入一行

 varname=value 

该环境variables将被设置为文件中该行之后出现的任何cron作业。 如果你想确定它只适用于那个命令,只需要把variables声明放在命令的开头,就像在控制台只改变一个命令一样:

 varname=value command 

所以它可能看起来像

 0 5 * * * varname=value command 

对于个人的crontab或者

 0 5 * * * root varname=value command 

对于一个系统。

注:我已经回答了你的问题,但其他人是正确的,这可能不是你的问题的原因。

追加到$ PATH可能是最好的,而不是覆盖它在这种情况下。

 PATH=${PATH}:/others/bin 

你也可以使用下面的代码来debuggingPATHvariables的设置

 #!/usr/bin/env bash logger "Path-dump: "${PATH} 

你可以在/ var / log / syslog中检查输出,你应该看到一些输出

 cat /var/log/syslog | grep "Path-dump"