使用 cron 时无法让 sudo 在脚本中工作

使用 cron 时无法让 sudo 在脚本中工作

环境:RHEL7.9 访问:无 root 访问权限。我拥有某些命令的 sudo 访问权限(无密码) 问题:我的个人 crontab 使用 sudo 调用脚本,但 sudo 不起作用。

我有一个调用 sudo /usr/systemctl start service 的 script.sh,它可以从我的 SHELL 运行,但不能从 crontab -e 运行。

This works: [mike@host] $ sudo /usr/systemctl start service
This works: [mike@host] $ ./script.sh #which has the command it

This fails: [mike@host] $ crontab -e
#MQ CRONS
SHELL=/bin/bash
*/15 * * * * bash -l -c '/export/local/mike/script.sh >> /tmp/log.log'

更详细地说,脚本运行良好,并执行每个步骤。当它到达 sudo 命令时,它只是不执行或类似的事情。有什么想法吗?是否存在 cron 限制?我尝试在脚本中使用 source /path/to/mike/.bash_profile 和一些 cron 操作,但无济于事。我打开了调试,它似乎只显示发出的命令。

答案1

问题在于安全性:

我让管理员将以下内容添加到 sudoers

Defaults !requiretty

更多信息请参见此处: https://www.shell-tips.com/linux/sudo-sorry-you-must-have-a-tty-to-run-sudo/#gsc.tab=0

答案2

我以前也遇到过这种情况,我用下面的方法解决了这个问题。我不确定它是否能解决你的手的问题,但可以试一试。

在脚本内部,删除“sudo”命令。

/usr/systemctl start service

当输入“crontab -e”时,在前面插入sudo。

sudo crontab -e

在 crontab 中,在 bash 前面添加 sudo。

*/15 * * * * sudo bash -l -c '/export/local/mike/script.sh >> /tmp/log.log'

我怀疑当脚本由 cron 运行的时候,它是以用户“mike”而不是 root 身份运行的,因此它没有执行/执行失败。

如果仍然不起作用,您可以提供以下日志,以便我们更深入地了解您所面临的错误

grep CRON /var/log/syslog

相关内容