我听说只能手动编辑/etc/crontab
而无需命令/etc/cron.d/*
crontab
如何编辑“/etc/crontab”和“/etc/cron.d/”下的文件?。
我是否需要运行crontab -e
来创建和编辑用户特定的 crontab 文件/var/spool/cron/crontabs/
?
我可以手动创建和编辑 crontab 文件吗 /var/spool/cron/crontabs/t
?
是否crontab -e
做了一些工作让cron
守护进程知道并加载用户特定的 crontab 文件,而手动创建和编辑无法做到这一点?
谢谢。
答案1
使用 Vixie Cron,它们只是普通文件 - 只要您获得正确的权限,您就可以根据需要编辑它们。 Cron 将注意到修改的文件并重新加载 crontab(每分钟检查一次)。这一切实际上都记录在cron 联机帮助页“注释”部分,至少在 Debian 上是这样。
但你真的不应该。
首先,您确实不需要:您只需将要作为 crontab 安装的文件传递给程序即可crontab
:crontab -u bob FILE
将安装FILE
为 Bob 的 crontab。并且FILE
可以-
使用标准输入。如果您想编写 crontab 更改脚本,您可以使用crontab -l -u bob
列出 crontab,对其进行编辑,然后将其加载回来。例如,您可以这样做(未经测试)以确保您的 root 任期是短暂的:
#!/bin/bash
while read -r -u 9 user; do
{
crontab -l -u "$user"
printf '%s\n' '* * * * * fortune -o | mail -s "DegradedArray event on /dev/md0" root'
} | crontab -u "$user" -
done 9< <(getent passwd | cut -d: -f1)
其次,上面暗示了一个不这样做的充分理由:这被记录为适用于 Debian 的 cron。但有很多不同的 Cron。例如,RHEL 使用不同的一种。 Arch 默认情况下使用 systemd 计时器(不确定它是否使用 systemd crontab-to-timer 桥),但让您可以选择5种不同的实现如果你想要一个真正的 Cron,可以从中选择。不管怎样,使用crontab
安装 crontab 都会起作用,或者至少会失败并显示错误消息,以便您知道它不起作用。它更加便携。
答案2
除此之外,出于安全原因/var/spool/cron/crontabs/
只能通过命名管道写入这一事实通知进程。root
crontab
cron
/etc/cron.d/FIFO
因此,如果您要root
添加或修改 crontab 条目,则需要等到cron
重新启动才能使更改生效。
答案3
我是否需要运行 crontab -e 来在 /var/spool/cron/crontabs/ 下创建和编辑用户特定的 crontab 文件?
不
我可以手动创建和编辑 crontab 文件 /var/spool/cron/crontabs/t 吗?
是的,但前提是您有一个名为 的用户t
,这似乎不太可能。
当然,正如其他人指出的那样,“首选”方法是运行crontab
.但是,例如,如果您正在创建新图像并且您已经知道这些命令是有效的,则这是不必要的。规则如下:
- 该文件应指定为现有用户的名称;它将代表他们运行
- 该文件应由 拥有
user:crontab
,模式为600
(其中user
是用户名和文件名)
如果您需要确认,请运行crontab -e
(在设置EDITOR
变量之后,即export EDITOR=emacs
或其他),然后输入您建议的命令。这将创建具有正确名称和权限的文件;你可以只编辑这个文件。
答案4
在 UBUNTU 中,你可以以 root 身份创建任何 cron 作业并重新加载它,而无需使用 crontab -e 只放置 2 行
echo '@reboot /etc/esperandoroute.sh' >> /var/spool/cron/crontabs/root
crontab -u root /var/spool/cron/crontabs/root
crontab -l