Linux操作系统(在redhat); crontab的; bash – 脚本在shell中工作,但不在Crontab中 – 将命令分配给variables失败

我知道我的问题被问了几次,但是我的问题没有解决办法。 在我的公司有一个运行在RedHat Mashine上的应用程序。 用户通过ssh将基于文本的GUI连接到此服务器。 此应用程序不支持密码老化重置密码。

我做了一个脚本检查密码老化时间,并发送电子邮件给每个用户。

该脚本运行良好,但不能在crontab中工作。 几个testing(触摸testing文件)显示crontab正在工作,所有脚本都被执行。 我在新脚本的开头用一个简单的echo命令validation了这一点。

用几个回声进行更深入的调查表明,将一个命令分配给一个variables是有问题的。

这工作了几年,并在几个crontabs

VAR = `ls` 

我testing了其他版本:

 VAR = $(ls) VAR = `/bin/ls` VAR = $(/bin/ls) 

脚本片段:

 (... generating user/email array ...) echo "----------------START "$LOGDATE" ---------------" >> $LOGFILE for ((i=0; i<${#USER[*]} ; i++)) do USERNAME=${USER[$i]} EMPFAENGERNAME=${EMPFAENGER[$i]} TEMP1=`chage -l $USERNAME | grep 'Kennwort läuft ab'|cut -d ":" -f2` (... sending email to user telling him to change password ...) 

Crontab :(根)

 00 12 * * 1-5 /root/pw_warning.sh 

这个脚本太简单了,它的工作原理和sudo一样,没有什么复杂的,但是我没有明白我做错了什么。

更新:

testingPATH =(..)在crontab和脚本build议。 根本没有变化。

再一次:crontab正在工作和执行脚本。 脚本中的每个命令都是为自己工作的,但是不应该将其分配给variables。

更新2:添加path到shell不起作用:

  0 0 * * * /bin/bash /path/to/script.sh 

UPDATE3:

工作解决方法:

 0 0 * * * ssh root@localhost "/path/to/script" 

Cron将一组最小的环境variables传递给您的工作。

这里常见的“gotcha”是不同的PATH环境variables。

为了解决这个问题,只需在脚本的顶部设置自己的PATHvariables即可。 例如

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

您也可以在crontab文件中设置PATHvariables,该variables将应用于所有的cron作业。 例如

 PATH=/opt/someApp/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 15 1 * * * backupscript --incremental /home /root 

从这里

另外,根据你正在使用的variables赋值来判断,你的脚本不能在/bin/sh ,确保你的第一行是正确的:

 #!/bin/bash 

或者更好地运行你的脚本

 0 0 * * * /bin/bash /path/to/script.sh 

而不仅仅是/path/to/script.sh

最后,你可能会试着把下面的黑客代码放在你的crontab中,因为它应该和你自己从shell运行脚本一样:

  15 1 * * * ssh root@localhost "/path/to/script.sh" 

问题是你的脚本,但。 尝试使用这个或这个 bash脚本模板,这应该消除任何variables分配相关的问题。