答案1
跑步crontab -e
编辑用户的 crontab(而不是系统 crontab /etc/crontab
)。如果你运行sudo crontab -e
,这将编辑 root 帐户的用户 crontab (即不是与 相同/etc/crontab
)。root 账户的用户 crontab 可用,但通常不是系统管理员希望编辑的。
当您运行 时crontab -e
,该crontab
实用程序会将正在编辑的特定用户特定的 crontab 文件复制到临时文件中。这是预期的正确行为。假设您在编辑器中对临时文件进行了更改,crontab
则在您完成编辑后会自动将这些更改写回 crontab 文件。
布赖安有解释了为什么以及如何做到这一点的一些细节在 ”Cron、crontab -e 读取了错误的文件“ 在Unix操作系统:
这是默认行为
crontab -e
。将 crontab 文件复制到临时目录,然后使用 VISUAL 或 EDITOR 环境变量中列出的编辑器打开此文件,保存时会尝试将文件复制到原始位置。这是一个原子操作。其背后的原因多种多样,包括防止两个用户同时编辑同一个文件、在写入原始文件之前进行健全性/语法检查等。
啊,
crontab -e
除非您使用 Debian,否则也不要以任何方式修剪文件。
你问题中的截图显示了类似这样的内容,这是用户Ubuntu 中的 crontab:
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
相比之下,/etc/crontab
Ubuntu 中的默认系统 crontab()如下所示:
# /etc/crontab: system-wide crontab
# Unlike any other crontab you don't have to run the `crontab'
# command to install the new version when you edit this file
# and files in /etc/cron.d. These files also have username fields,
# that none of the other crontabs do.
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
# m h dom mon dow user command
17 * * * * root cd / && run-parts --report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )
47 6 * * 7 root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.weekly )
52 6 1 * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.monthly )
#
作为siloko 解释在 ”Crontab -e 每次运行时都会打开新文件”,并且如默认系统 crontab 的前导注释(如上所示)中所述,系统范围的 crontab/etc/crontab
与每个用户的 crontab 的不同之处在于,每个条目都包含一个字段,用于指定哪个用户运行该命令。上面的示例root
针对三个命令中的每一个,但您可以通过在该字段中指定其他用户的用户名来使命令以其他用户的身份运行。
虽然我不能确定,但我猜测您正在尝试编辑系统 crontab,而不是 root(或任何其他人的)用户 crontab。
进一步阅读:
man 5 crontab
和Cron如何操作描述如何编写 crontab 文件。- 如何设置 Cron 作业?展示了使用 cron 安排系统和用户任务的几种方法。