我知道我的问题被问了几次,但是我的问题没有解决办法。 在我的公司有一个运行在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分配相关的问题。