我可以在没有“crontab -e”的情况下手动创建和编辑“/var/spool/cron/crontabs/t”吗?

我可以在没有“crontab -e”的情况下手动创建和编辑“/var/spool/cron/crontabs/t”吗?

我听说只能手动编辑/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 安装的文件传递给程序即可crontabcrontab -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/只能通过命名管道写入这一事实通知进程。rootcrontabcron/etc/cron.d/FIFO

因此,如果您要root添加或修改 crontab 条目,则需要等到cron重新启动才能使更改生效。

答案3

我是否需要运行 crontab -e 来在 /var/spool/cron/crontabs/ 下创建和编辑用户特定的 crontab 文件?

我可以手动创建和编辑 crontab 文件 /var/spool/cron/crontabs/t 吗?

是的,但前提是您有一个名为 的用户t,这似乎不太可能。

当然,正如其他人指出的那样,“首选”方法是运行crontab.但是,例如,如果您正在创建新图像并且您已经知道这些命令是有效的,则这是不必要的。规则如下:

  1. 该文件应指定为现有用户的名称;它将代表他们运行
  2. 该文件应由 拥有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

相关内容