使用Crontab调度计划任务

Linux计划任务,可以按分钟,小时,天,月,星期几调度任务;

配置文件

有2种类型的配置文件

  • 系统范围的计划任务
  • 单用户的计划任务

Linux的分发版本不同,配置文件的路径会不同;
CentOS用户的计划任务文件在/var/spool/cron目录下;
Ubuntu在/cron/crontabs目录下;

系统范围的计划任务文件,有2个目录

  • /etc/crontab,系统范围的用户任务;
  • /etc/cron.d,系统计划任务,分为hourly,daily,weekly,monthly任务;

只能由系统管理员编辑;

编辑/etc/crontab,格式为

* * * * *  command(s)

需要加有任务运行的用户名;
用户计划任务不需用户名;

计划任务的语法

* * * * * command(s)
- - - - -
| | | | |
| | | | ----- Day of week (0 - 7) (Sunday=0 or 7)
| | | ------- Month (1 - 12)
| | --------- Day of month (1 - 31)
| ----------- Hour (0 - 23)
------------- Minute (0 - 59)

* 代表’每’,如每分钟,每小时等;
, 表示列表,如小时段1,3,5,表示在1点,3点,5点的0分钟执行;
- 表示范围,如星期段1-5,表示在星期1到星期5执行;
/ 表示间隔,如小时段*/4,表示每隔4小时运行(从0点开始),等价于0,4,8,12,16,20;而1-30/10表示1,11,21

预定义宏

内置的时间表示

  • @yearly/@annually 等价于0 0 1 1 *
  • @monthly 等价于0 0 1 * *
  • @weekly 等价于0 0 * * 0
  • @daily 等价于0 0 * * *
  • @hourly 等价于0 * * * *
  • @reboot 重启后执行

crontab命令

crontab -e 编辑用户文件,不存在则创建;
crontab -l 列出文件内容;
crontab -u  编辑某个用户的文件;
crontab -i 删除当前计划任务文件,要确认;
crontab -r 删除当前计划任务文件,不需确认;

会调用系统定义的编辑器,编辑器环境变量为VISUALEDITOR

crontab变量

cron进程会自动设置一些环境变量

  • 默认PATH变量设置为PATH=/usr/bin:/bin;计划任务里的命令如果不在PATH里,可以使用绝对路径;或可以在文件里更改PATH;或在脚本中附加:$PATH
  • HOME变量,默认从用户家目录下运行命令;
  • MALLTO变量,设定接收通知的用户;

限制

系统管理员可以控制哪些用户可以运行计划任务;
/etc/cron.deny/etc/cron.allow 是每行一个用户名;

/etc/cron.deny 默认为空,所有用户都能运行计划任务;
/etc/cron.allow 默认不存在,只有定义的用户可以运行计划任务;

如果2个文件都不存在,只有授权的用户可以运行计划任务;

例子

//# 周1到周5,每天15:00点
0 15 * * 1-5 command

//# 标准错误通知发送给[email protected]
[email protected]
//# 每5分钟,标准输出到/dev/null
*/5 * * * * /path/to/script.sh > /dev/null

//# 周1的15:00
0 15 * * Mon command1 && command2

//# 每天的8点到16点
00 08-16 * * * /path/to/script.sh

//# 每月1号到7号,周1,7点
0 7 1-7 * 1 /path/to/script.sh

//# 每月的1号,15号,9:15
15 9 1,15 * * /path/to/script.sh

//# 设置crontab变量
HOME=/opt
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/usr/bin/zsh
[email protected]

*/1 * * * * command

你可能感兴趣的:(#,linux,crontab)