Linux内置的cron进程能帮我们轻松实现定时任务。通常我们使用crontab命令(cron table的简写)来进行管理,本文将介绍cron配置文件的语法并提供几个实例,在使用cron的过程中,可能会产生日志,如果定时任务过于频繁,可能造成日志文件过大,这里本文也将介绍如何合理配置cron日志与清理crontab日志。
在本文中,统称cron的配置文件为任务表,编辑任务表的命令为:
crontab [-u username] -e #省略用户表表示操作当前用户的任务表
用 crontab -e
进入当前用户的任务表编辑。
注:首次用 crontab -e
进入当前用户的任务表编辑时,会提示选择一个用于编辑文本的编辑器,通常是 nano 和 vim ;
nano 文本编辑器的使用:编辑完成后使用 CTRL + X 退出,然后它会询问你是否保存,按 Y 确认,最后按 Enter 保存配置文件;vim编辑器的使用可以参阅:Linux系统中常用的文本编辑器:Vim使用入门
用户定时任务配置文件存放于 /var/spool/cron
目录下,以用户名命名。如文件 /var/spool/cron/root
就是root用户的定时任务配置文件。通常我们不会直接去管理这些配置文件,使用用 crontab -e
命令就是创建或修改这些配置文件并使定时任务生效。
crontab定时任务表的语法格式为:
* * * * * commend
每个星号代表一个时间单位,从左到右分别是:分钟(0-59)、小时(0-23)、日期(1-31)、月份(1-12)、星期(0-7,0和7都代表星期日)
可以使用数字,逗号,短横线,或者星号来指定时间范围或者间隔:
*
取值范围内的所有数字
/
每过多少个数字
-
从…到…
,
散列取值
例如:
0 8 * * 1 /root/new.sh
表示每周一的8点整执行root目录下的 new.sh 脚本(这个定时任务配置文件是哪个用户的到时候就是使用哪个用户来执行这个脚本)
3,15 8-11 */2 * * myCommand
表示每隔两天的上午8点到11点的第3和第15分钟执行
可以使用 systemctl
命令来查看 cron 服务的状态:
sudo systemctl status cron
如果看到输出中有 active 字样,就说明 cron 服务是运行着的。
cron日志可能存在的位置:
在大多数Unix和Linux系统上,crontab 的执行日志通常会被记录在系统日志中。系统日志的位置和名称可能因系统而异,但通常在 /var/log
目录下。
在Linux系统上,crontab 任务的输出和错误信息通常会通过电子邮件发送给相应用户的系统邮箱。这些邮件会被存储在用户的邮箱中,其中root用户的邮箱通常位于 /var/spool/mail/root
或 /var/mail/root
。
可以使用 tail -f 命令查看最近一次 cron 的执行日志:
tail -f /var/spool/mail/root
可以自定义日志的位置,如:
0 8 * * 1 /root/new.sh > /root/cron.log 2>&1
上述配置中,使用了 > /root/cron.log 2>&1
这样的重定向语法,这意味着标准输出和标准错误输出都被重定向到了 /root/cron.log 文件中。由于输出已经被完全重定向,cron 不会再将任务的输出发送到系统邮箱(例如 /var/spool/mail/root)。因此,就不会在 /var/spool/mail/root 中看到大量的 cron 日志。
2>&1
是一种 shell 的重定向语法,它用于将标准错误输出(stderr,文件描述符 2)重定向到与标准输出(stdout,文件描述符 1)相同的位置。这意味着标准错误输出将与标准输出一起被重定向到同一个文件或位置。
在Linux中,>>
和 >
都是用于重定向输出的符号。>
符号:它用于将命令的标准输出重定向到指定文件。如果文件不存在,将创建一个新文件;如果文件已经存在,它将被覆盖。>>
符号:与 >
类似,但是它用于将输出追加到指定文件的末尾,而不是覆盖文件的内容。
▷▶▷所以使用上面的定时任务配置,只有最近的一次执行日志会被记录到 /root/cron.log 文件中。
捐赠通道,感谢!🦀🦀