我想在本地机器的crontab中添加一行,每五分钟运行一次。我的问题是我要使用的命令需要sudo:
sudo indexer --config /usr/local/etc/sphinx.conf --all --rotate
有没有一种方法可以在不使用sudo的情况下运行命令,而且不需要输入密码?
谢谢!
只需使用cmd visudo(此cmd需要root权限)将您的命令附加到sudoer文件列表中,如下所示:
<YOUR_USER_NAME> ALL = NOPASSWD:<ABSOLUTE-PATH-TO-CMD>
请注意维护ABSOLUTE-PATH-TO-CMD,否则会成为安全漏洞。
将其放入root用户的crontab中
sudo crontab -e
在那里,你可以放置
indexer --config /usr/local/etc/sphinx.conf --all --rotate
此 crontab 中的所有命令将以 root 身份执行。 如果您只是使用当前用户执行 crontab -e
,则它们将在您的用户权限下执行。
sudo
会允许你作为“root”用户执行命令(通常在提示输入密码后),因为你被写入了sudoers
文件中。另一种以“root”身份执行命令的方式是使用su
命令,它会提示你输入“root”的密码。由于必须是“root”编写了命令,所以在“root”计划任务表中的命令将作为“root”执行。 - Gilles 'SO- stop being evil'除非服务器已从黑客做了很好的安全防护,否则将应用程序放在root的crontab中是极其危险的。如果碰巧有人替换了二进制文件(包括库文件),你就完蛋了!
更好的方法是将二进制文件访问的所有文件的所有者改为非特权用户,并以非特权用户身份运行作业。
应用程序使用的任何二进制文件都不应该对除root之外的任何人具有可写权限。
以 root 用户运行?还是 sphinx 用户?尝试找出需要运行的用户,并将其添加到该用户的 cron 中。
您可以配置sudo不要求密码。阅读sudoers手册以了解如何执行此操作。搜索NOPASSWD字符串。