环境: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