Linux Crontab 定时任务使用示例

目录

语法

crontab 时间表达式

执行目录下的所有脚本

执行指定脚本

执行日志

邮件通知

限制某些用户使用crond

定时任务管理

启动

停止

重启

查看状态

简单示例

新建测试脚本

编辑定时任务crontab

脚本授权

启动定时任务


最近工作中有这么一个场景:定时将日志文件入库(MySQL),我使用到了Linux自带的Crontab定时任务和MySQL的LOAD DATA,这篇记录一下Crontab的简单使用示例,下一篇记录一下使用Crontab定时入库数据,敬请期待。

如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️,满足一下我的虚荣心💖🙏🙏🙏 。

语法

我们看下 /etc/crontab 的内容,如下:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

# For details see man 4 crontabs

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

如上,最后一行就是语法

*  *  *  *  * user-name  command to be executed

前五个*:配置定时任务执行的时间。

user-name:以什么身份任务。

command to be executed:要执行的脚本。

这里补充另一个参数:run-parts

run-parts:执行指定目录下的脚本。

crontab 时间表达式

先看下系统 /etc/crontab 文件内容,如下:

 *  *  *  *  * user-name  command to be executed
项目含义范围
第一个"*"一小时当中的第几分钟(minute)0~59
第二个"*"一天当中的第几小时(hour)0~23
第三个"*"一个月当中的第几天(day)1~31
第四个"*"一年当中的第几个月(month)1~12
第五个"*"一周当中的星期几(week)0~7(0和7都代表星期日)

在时间表示中,还有一些特殊符号需要知道,如下:

特殊符号含义
*(星号)代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
,(逗号)代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-(中杠)代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线)代表每隔多久执行一次。比如"*/10命令",代表每隔 10 分钟就执行一次命令。

简单示例:

表达式含义
45 22 ***在每天22 点 45 分执行
*/10 4 ***每天的凌晨 4 点,每隔 10 分钟执行一次
0 5 1,15**在每月 1 日和 15 日的凌晨 5 点 0 分执行
0 17 ** 1在每周一的 17 点 0 分执行
40 4 ** 1-5在每周一到周五的凌晨 4 点 40 分执行

注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆。

执行目录下的所有脚本

run-parts 指定目录下的脚本都会执行。

示例:

* * * * * root run-parts /home/cron

/home/cron 目录下所有脚本都会每分钟执行一次。

执行指定脚本

不使用 run-parts 时,可以直接指定要执行的脚本。

示例:

* * * * * root /home/cron/test.sh

/home/cron 目录下虽然有多个脚本,但是只会执行 test.sh 脚本。

执行日志

定时任务的执行日志保存在 /var/log/cron 文件中,可以查看日志检查定时任务的执行过程中有没有报错:

tail -f /var/log/cron

邮件通知

/var/spool/mail 目录下存放发送给每个用户的消息,这里面相对log中记录的更为详细,如果脚本运行有错误,也会记录,脚本中的测试输出语句,也会进行记录。

比如你有一个用户yjh,则在此目录下会生成一个yjh的邮件通知文件,文件名就是用户名,我这里用的root执行的,查看日志指令如下:

tail -f /var/spool/mail/root

下面这是我实际使用时的部分日志: 

限制某些用户使用crond

通过 /etc/cron.allow 和 /etc/cron.deny 文件来限制某些用户是否可以使用 crontab 命令的。

  • 当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高。

  • 当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令。

定时任务管理

启动

systemctl start crond.service

停止

systemctl stop crond.service

重启

systemctl restart crond.service

查看状态

systemctl status crond.service

简单示例

每分钟都执行一次/home/cron目录中的test.sh脚本,向/home/cron/test.log 文件写入hello,脚本执行者是root用户

新建测试脚本

vim /home/cron/test.sh

内容如下:

#/bin/bash
echo "hello" >> /home/cron/test.log

编辑定时任务crontab

vim  /etc/crontab

内容如下:

# 每分钟执行一次
* * * * * root run-parts /home/cron 

脚本授权

chmod 755 test.sh

启动定时任务

systemctl start crond.service

几分钟后我们发现 /home/cron 目录下多了一个 test.log 文件,查看下test.log文件内容如下:

 

至此结束!!! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值