在Linux中可以使用crontab命令来做定时任务。

我们可以每隔5分钟或者5小时执行某个任务,

亦或者每天的凌晨执行某个任务,

同样可以在某个连续的时间段执行某个任务(比如每天的7到19点执行数据的处理)。

下面介绍crontab命令的语法和使用

命令格式

crontab 选项 [文件]
选项说明
-e常用,编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件
-l
常用,显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容
-r
从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件;
-u<用户名称>指定要设定计时器的用户名称,例如,“-u yxjc”表示设定yxjc用户的crontab服务,此参数一般由root用户来运行;
-i在删除用户的crontab文件时给确认提示。
-sselinux context

时间格式

 *  *  *  *  *  command 
 分  时  日  月  周  命令 

第1列表示分钟1~59 每分钟用*或者 */1表示
第2列表示小时1~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列表示号星期0~6(0表示星期天)
第6列要运行的命令

crontab 启动重启停止命令

systemctl start crond //启动服务
systemctl stop crond //关闭服务
systemctl restart crond //重启服务
systemctl reload crond //重新载入配置
systemctl status  crond //查看crontab服务状态

例子

根据前面所说的,下面给出crontab的例子,其中.sh的内容可以是执行 java、php、python等的程序。

# 每隔5分钟执行
*/5 * * * * /data/script/xxx.sh

# 每隔5小时执行
* */5 * * * /data/script/xxx.sh

# 每天的7点到19点执行任务
* 7-19 * * * /data/script/xxx.sh

# 每天的7点到19点每隔5分钟执行
*/5 7-19 * * * /data/script/xxx.sh

# 每周三的16点30分执行
30 16 * * 3 /data/script/xxx.sh

crontab 日志

有时候不知道定时任务是否执行了,我们可以通过crontab的日志文件查看脚本是否执行成功。

默认情况下crontab 日志在/var/log下,可以通过ls 命令查看如下:

[root@localhost log]# ls -l /var/log/cron*
-rw------- 1 root root 100730 Mar 24 20:54 /var/log/cron
-rw------- 1 root root 128487 Feb 26 03:48 /var/log/cron-20230226
-rw------- 1 root root 172373 Mar  6 03:39 /var/log/cron-20230306
-rw------- 1 root root 128611 Mar 12 03:45 /var/log/cron-20230312
-rw------- 1 root root 172053 Mar 20 03:35 /var/log/cron-20230320

你可以通过winscp在线可视化工具查看日志文件的内容,也可以使用tail命令查看日志的内容,比如

tail -f /var/log/cron       //查看最新的日志
tail -100 /var/log/cron     //查看最新的100条日志