编辑crontab文件的正确方法是什么?

我正在尝试自动刷新我的Web服务器上的awstats,并了解到我需要使用cron来设置。所以每个用户都有一个crontab文件吗?
我按照这里的说明进行操作here community/AWStats
它说要去这个文件:/etc/crontab
那个文件已经有一些信息了。这是主要的crontab文件还是其他什么东西?我在网上看到一些指示要使用弹出的文件,用crontab -e。
应该使用哪个正确的文件,以及最好的方法是什么?
如果我将任务安排为非root用户,它会按照指定的时间间隔自动运行,没有问题吗?
在保存了crontab文件中的cron作业后,我需要重新启动服务器才能开始工作吗?
2个回答

使用哪个文件和最佳方法来完成这个任务?

crontab -e 是最佳的方法 - 这将允许您轻松编辑每个用户的定时任务。

如果我以非root用户身份安排一个任务,它会按照指定的时间间隔自动运行吗?会有什么问题吗?

是的,它会按照该用户账户的权限运行。

原则上,最好以尽可能低的权限运行定时任务,所以如果您的操作不需要root权限,就不要使用root。如果您甚至不需要访问账户的文件和文件夹,那么您可以创建一个新用户,仅仅用于执行该任务。另一方面,如果您的任务确实需要root权限,请使用root的定时任务(使用su / sudo su 切换到root,然后使用crontab -e)。

在保存了crontab文件中的cron任务后,我是否需要重新启动服务器才能使其开始工作?

不,它会立即开始工作(嗯,下一个可能的计划时间)。
为什么不直接编辑文件?它在哪里?
用户的crontab文件位于/var/spool/cron/crontabs目录下,但其权限设置得无法在没有超级用户权限的情况下进行遍历(但一旦打开并且cron进程降低权限后,仍然可以访问该文件)。
系统并不是设计给终端用户直接编辑这些文件的,事实上,文件的顶部有一个严厉的“DO NOT EDIT THIS FILE”警告。相反,应通过crontab -e命令来编辑文件,该命令会在/tmp目录中设置一个临时镜像文件供编辑使用,而不会出现严厉的警告,之后它会检查并安装永久的crontab文件。所有这些都可以在没有超级用户权限的情况下完成。
如果您直接编辑crontab文件,我不知道结果会是什么。可能直到下次重启才会生效,并且任何错误可能很难调试。

8crontab -e 允许您在不使用sudo的情况下编辑您的用户crontab。用户的crontab位于/var/spool/cron/crontabs目录中,该目录无法在没有超级用户权限的情况下访问(但是一旦cron放弃特权,仍然能够读取它)。即使您使用sudo直接尝试编辑文件,您也会在顶部看到一个大警告:“请勿编辑此文件” - 该文件设计为使用crontab命令进行编辑,该命令在/tmp中使用临时副本,然后在保存后安装它。 - thomasrutter

每个用户都有自己的crontab
要查看它,只需输入
crontab -l

是的,当你想要添加一个 crontab 时,只需执行以下操作
crontab -e

第一次使用crontab时,你会被要求选择一个编辑器。由于你自称是新手,我建议使用nano,它是最简单易用的编辑器。

关于crontab本身的工作原理如下:

MIN =  Minute 0-60
HOUR = Hour [24-hour clock] 0-23
MDAY = Day of Month 1-31
MON = Month 1-12 OR jan,feb,mar,apr ...
DOW =  Day of Week 0-6 OR sun,mon,tue,wed,thu,fri,sat
COMMAND = Command to be run Any valid command-line

例如,要在每个星期一每15分钟触发一个作业,你可以这样做。
*/15 * * * mon /home/me/yourscript.sh

是的,将您的cronjob放入具有足够执行权限的用户的crontab中非常重要。

因此,如果您的脚本需要root或特殊用户,请确保su到该用户并在那里添加cronjob。

还有非常重要的一点!

cronjob很笨!是的,我说了。始终确保输入您正在使用的应用程序/命令/脚本的完整路径,因为crontab无法使用.bashrc或类似文件。您始终必须确保告诉cron可以在哪里找到文件和目录。

回答您其余的问题:

当然它会自动运行,这就是它存在的原因。但是您需要检查cronjob是否真的做到了这一点,或者是否遗漏了某些内容。例如,登录日志文件以查看它是否真正起作用。

不,不需要重新启动。在Linux中,通常只有在安装新内核时才需要重新启动。要使用它,您需要重新启动。几乎所有其他操作都可以在Linux中完成而无需重新启动。当然有例外情况,但总体上这个说法是正确的。


1请检查您的时间格式,请参考此网站:https://crontab.guru/ - Astm