我使用的是启用了 SELinux 的 CENTOS 7。服务器有 root 帐户和 1 个用户帐户,一般情况下,我使用 root 访问权限来执行所有操作。
今天我尝试使用以下命令配置每晚运行的 cron 作业
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
========== Job 1 - Clear the access log ===========
55 23 * * * root truncate -s 0 /var/log/phpweb-datasync-access.log >/dev/null 2>&1
# ======== Job 2 Delete temp download photo from php web site===================
57 23 * * * root find /app/photo_store/ -mtime +1 -exec rm -f {} \; >/dev/null 2>&1
# ======== Job 3 Restart httpd Server ===========
59 23 * * * root sudo service httpd restart >/dev/null 2>&1
一切正常,但我很好奇在作业 3 中我真的需要 sudo 吗?在这种情况下,我尝试在终端中运行“service httpd restart”,它没有权限问题,但我看到一些教程网站上的 cron 作业示例也有“sudo”。
答案1
如果您是从 运行它crontab
(root
看起来您就是这样),那么您不需要sudo
在 中指定cronjob
。它将从具有适当权限的 root shell 运行,并且您已经root
在 cronjob 本身中指定了。
事实上,如果你以crontab -e
as身份运行该作业root
,那么你甚至不需要指定root
用户。使用sudo
不会造成任何损害,但这不是必需的。
答案2
Jobs in /etc/cron.d/
The jobs in cron.d are system jobs, which are used usually for more than one
user. That's the reason why is name of the user needed. MAILTO on the first
line is optional.
EXAMPLE FOR JOB IN /etc/cron.d/job
#login as root
#create job with preferred editor (e.g. vim)
MAILTO=root
* * * * * root touch /tmp/file
在您的文件中,您正在定义用户root
,因此该命令将以提升的权限执行。
这sudo
是没有必要的。