将 sudo 结果存储到变量中

将 sudo 结果存储到变量中

我有这个简单的脚本

#!/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"

相关内容