我有这个简单的脚本
#!/bin/sh
ISUP=`sudo /etc/init.d/jboss7 status | grep running`
echo "ISUP: " $ISUP
如果我手动运行它,它工作正常
[jboss@suc072-ipos ~]$ sh a.sh
ISUP: JBoss AS 7.1.1 is running (pid 29125)
但是如果我用 crontab 运行它,变量为空:O:(
* * * * * /home/jboss/a.sh > /home/jboss/a.log
[jboss@suc072-ipos ~]$ cat a.log
ISUP:
知道如何修复这个问题吗?
Linux CentOS
[jboss@suc072-ipos ~]$ cat /etc/redhat-release
CentOS release 6.7 (Final)
答案1
除非你已经为这个 cron 任务运行的账户配置了 sudo,使其不需要密码,并且你还修改了/etc/sudoers
注释掉该行Defaults requiretty
,并(可能)将 / 添加etc/init.d/
到安全路径,否则总是会失败当以非交互方式运行时,就像在 cronjob 中一样。
相反,更受欢迎的方法是将 cron 作业设置为以 root 身份运行,并从脚本中删除 sudo。要添加将以 root 身份运行的 cron 作业,请使用以下命令:
sudo crontab -e
按照之前的方式添加 cronjob。
然后从脚本中删除 sudo,这里还有一些其他小的清理/建议的更改:
#!/bin/bash
ISUP="$(/etc/init.d/jboss7 status | grep running)"
echo "ISUP: $ISUP"