linux计划任务邮箱设置,Linux Crontab 计划任务拾遗

介绍

Crontab 是一个用于设置周期性被执行任务(即计划任务)的工具。

被周期性执行的任务:Cron Job

周期性执行的任务列表:Cron Table

安装

# 主程序

yum installvixie-cron -y

# 用来安装、卸装、列举用来驱动 cron 守护进程的表格的程序

yum installcrontabs -y

# 启动 crond 服务

systemctl start crond.service

检测服务状态

方法1:crontab -l

方法2:ps -elf | grep crond | grep -v "grep"

方法3:service crond status

Crond 是什么?

Crond 是一个守护进程,每分钟会从配置文件中刷新并执行定时任务。

每分钟不仅要读一次 /var/spool/cron 内的所有文件,还需要读一次 /etc/crontab,因此此类文件修改后不需要重新启动 cron 服务。

系统级计划任务 /etc/crontab

分 时 日 月 周 `用户名` /root/do.sh

用户级的计划任务 /var/spool/cron/用户名

# 编辑指定用户的任务表

# -u 缺省不写就代表当前用户

crontab -e [-u 用户名]

# 列举指定用户的任务表

crontab -l [-u 用户名]

# 清除指定用户的任务表

crontab -r [-u 用户名]

补充几点说明:

执行 crontab -e 实际上是修改文件 vi /var/spool/cron/用户名

执行 crontab 文件名 时,是直接导入覆盖任务表到 /var/spool/cron/用户名 中。

在 /etc/cron.d/ 目录里的文件,可以认为是对系统配置 /etc/crontab 的补充,语法一样,会在 crond 运行时自动加载

放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly 和 /etc/cron.monthly 这几个文件夹里的脚本,会按指定的周期定期执行。

使用者权限

文件 /etc/cron.deny 中所列用户不允许使用 crontab 命令

文件 /etc/cron.allow 中所列用户允许使用 crontab 命令

配置格式

# 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

有趣的配置示例

# 奇数分钟执行

1-59/2 * * * * /root/do.sh

# 偶数分钟执行

*/2 * * * * /root/do.sh

# 表示第 1,3,5,7,9 分钟会执行,第11分钟不会执行

# 即先要满足条件 1~10,再满足逢 2

1-10/2 * * * * /root/do.sh

执行日志

可以通过看日志来知道任务有没有运行 tail -f /var/log/cron

ls /var/log/cron*

cron(最新的日志文件)

cron-20161030(截止到10月30日的日志文件)

cron-20161106

cron-20161113

cron-20161120

容易犯错的点

1、环境变量读取

Crontab 执行任务调度时,不会加载任何环境变量,所以请在执行脚本中自己用 source 命令引入环境变量。

另外执行脚本中涉及文件路径时必须写绝对路径。

2、第3个参数(日)和第五个参数(周)是逻辑或的关系

# 四月的第一个星期日0点59分运行

# 注意 %w 百分号要用斜杠转义,因为 % 本身在 Crontab 里是换行的意思

59 0 1-7 4 * test `date +\%w` -eq 0 && /root/do.sh

# 错误的写法:

# 四月的 1~7 号或星期日0点59分运行

59 0 1-7 4 0 /root/do.sh

# 比较(0 真,1 假)

test 1 = 1

# 输出上一条命令的结果

echo $?

3、如何执行周期小于1分钟的任务?

# 每半分钟执行一次

# 写两遍:第1遍每分钟的0秒执行,第2遍虽然也是0秒开始,但会先睡30秒再真正执行脚本

*/1 * * * * /root/do.sh

*/1 * * * * sleep 30s; /root/do.sh

注意清理系统用户的邮件日志

每条任务调度执行完毕,系统都会将任务输出信息通过 mail 形式发送给当前系统用户 /var/spool/mail/用户名,日积月累,日志会很大,因此,将每条任务进行重定向忽略输出:

0 */3 * * * /root/do.sh >/dev/null 2>&1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值