定时器crontab

linux下使用crontab命令被用来提交和管理用户需要周期性执行的任务。

1.crontab语法
crontab  (选项)(参数)
例如:crontab -e
2.crontab选项
-e:修改 crontab 文件,如果文件不存在会自动创建。 
-l:显示 crontab 文件。 
-r:删除 crontab 文件。(慎用!)
-ir : 删除 crontab 文件前提醒用户。
-u<用户名称>:指定crontab 文件用户名称。
3.crontab参数
crontab文件:指定包含待执行任务的crontab文件。
例如:shell脚本,python脚本,cron脚本文件等。。。
4.cron服务
CentOS
查看crontab状态
service crond status 

开启crontab
service crond start

关闭crontab
service crond stop

重启crontab
service crond restart
Ubuntu
查看crontab状态
service cron status 

开启crontab
service cron start

关闭crontab
service cron stop

重启crontab
service cron restart
5.编辑定时任务
  • 在crontab文件中写入需要执行的命令和时间,该文件中每行都包括六个域,其中前五个域是指定命令被执行的时间,最后一个域是要被执行的命令。每个域之间使用空格或者制表符分隔。格式如下:
    minute hour day-of-month month-of-year day-of-week commands
    分 时 日 月 星期几 要执行的命令
示例:

30 21 * * * /etc/init.d/smb restart 	每晚的21:30重启smb

0 12 * * * /home/gim/project/hello.sh	每天中午12点的执行shell脚本

0 13 * * 0 /home/gim/project/hello.sh	每周日13点的执行shell脚本

0 4 1 1 * command line		1月1日早上4点

0 11 4 * 1-3 command line	每个月的4号和每个礼拜的礼拜一到礼拜三的早上11点

02 4 * * * root run-parts /etc/cron.daily	每天(凌晨4:02)执行/etc/cron.daily内的脚本 - root用户执行

15 */2 * * * echo "Have a break now." >> /tmp/test.txt	每两个小时(第一个为15,指明没两个小时的第15min中执行一次)

0 23-7/2,8 * * * echo "Have a good dream" >> /tmp/test.txt	晚上11点到早上8点之间每两个小时和早上八点

30 12 * * * /usr/local/bin/python3 /home/gim/project/calculate_summary4pro.py 0 >> /home/gim/project/logs/python3/python$(date +\%Y\%m\%d).log 2>&1	每天中午12点半执行一次python脚本,并把执行的日志结果追加到当天的日志文件中。

合法值为:00-59 00-23 01-31 01-12 0-6 (0 is sunday)

  • 除了数字还有几个特殊的符号:
    *代表所有的取值范围内的数字
    "/“代表每的意思,”/5"表示每5个单位
    "-"代表从某个数字到某个数字
    ","分开几个离散的数字
【 知识扩展】

Linux下的任务调度分为两类:系统任务调度和用户任务调度。
系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。
在oracle 中可以利用dbms_job包定时执行pl/sql、sql过程,在像备份等需要在操作系统级定时任务只能采用crontab来完成。

【注意事项】
%
  • 在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%
    59 1 1-7 4 * test 'date +\%w' -eq 0 && /root/a.sh
注:commands(参数文件)注意以下几点
  • 要是存在文件,要写绝对路径。
    即使是打印也不会显示在显示屏,在后台运行,最好重定向日志。
环境变量
文件或用户权限