crontab说明

Linux crontab是用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
而linux任务调度的工作主要分为以下两类:

  • 1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
  • 2、个人执行的工作:某个用户定期要做的工作,例如每隔10分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置

    crontab:定时任务的守护进程,精确到分,设计秒的我们一般写脚本 —>相当于闹钟 日志文件: ll /var/log/cron* 编辑文件: vim /etc/crontab 进程:ps -ef | grep crond ==> /etc/init.d/crond restart 作用:定时备份,实时备份

语法

  1. crontab [ -u user ] file

  1. crontab [ -u user ] { -l | -r | -e }

说明:
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
参数说明

  • -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
  • -r : 删除目前的时程表
  • -l : 列出目前的时程表

时程表的格式如下: f1 f2 f3 f4 f5 program

  • 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
  • 当 f1 为 时表示每分钟都要执行 program,f2 为 时表示每小时都要执行程序,其馀类推
  • 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
  • 当 f1 为 /n 时表示每 n 分钟个时间间隔执行一次,f2 为 /n 表示每 n 小时个时间间隔执行一次,其馀类推
  • 当 f1 为 a, b, c,… 时表示第 a, b, c,… 分钟要执行,f2 为 a, b, c,… 时表示第 a, b, c…个小时要执行,其馀类推

使用者也可以将所有的设定先存放在文件中,用 crontab file 的方式来设定时程表。

实例

每月每天每小时的第 0 分钟执行一次 /bin/ls

  1. 0 * * * * /bin/ls

在 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 /usr/bin/backup

  1. 0 6-12/3 * 12 * /usr/bin/backup

周一到周五每天下午 5:00 寄一封信给 alex@domain.name

  1. 0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata


每月每天的午夜 0 点 20 分, 2 点 20 分, 4 点 20 分….执行 echo “haha”

  1. 20 0-23/2 * * * echo "haha"

下面再看看几个具体的例子:

  1. 0 */2 * * * /sbin/service httpd restart 意思是每两个小时重启一次apache
  2. 50 7 * * * /sbin/service sshd start 意思是每天750开启ssh服务
  3. 50 22 * * * /sbin/service sshd stop 意思是每天2250关闭ssh服务
  4. 0 0 1,15 * * fsck /home 每月1号和15号检查/home 磁盘
  5. 1 * * * * /home/bruce/backup 每小时的第一分执行 /home/bruce/backup这个文件
  6. 00 03 * * 1-5 find /home "*.xxx" -mtime +4 -exec rm {} \; 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
  7. 30 6 */10 * * ls 意思是每月的1112131日是的630执行一次ls命令

注意:当程序在你所指定的时间执行后,系统会寄一封信给你,显示该程序执行的内容,若是你不希望收到这样的信,请在每一行空一格之后加上 > /dev/null 2>&1 即可

常见命令

  1. // 查看是否安装
  2. ctrontab -l
  3. // 是否启动
  4. service crond status systemctl status crond
  5. // 安装
  6. yum install vixie-cron
  7. yum install crontabs
  8. service crond start //启动服务
  9. service crond stop //关闭服务
  10. service crond restart //重启服务
  11. service crond reload //重新载入配置
  12. service crond status //查看服务状态
  13. crontab -l // 查看定时任务列表
  14. crontab e // 编辑定时任务
  15. crontab -r // 删除定时任务
  16. crontab i // 在删除用户的crontab文件时给确认提示

crontab 时间表示

项目 含义 范围
第一个”*” 一小时当中的第几分钟(minute) 0~59
第二个”*” 一天当中的第几小时(hour) 0~23
第三个”*” 一个月当中的第几天(day) 1~31
第四个”*” 一年当中的第几个月(month) 1~12

时间特殊符号

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

树莓派发送设备温度简单示例

每2分钟,以邮件方式发送树莓派温度到指定邮箱

脚本:temperate.sh

  1. #!/bin/bash
  2. #实时上报树莓派温度到邮件
  3. #当前时间
  4. CURRENT_TIME=$(date "+%Y-%m-%d %H:%M:%S")
  5. #读取设备hostname
  6. HOSTNAME=$(hostname)
  7. #获取温度数据
  8. TEMPERATURE=$(/opt/vc/bin/vcgencmd measure_temp)
  9. # send the Email
  10. echo -e "设备ID:"$HOSTNAME"\n当前时间:"$CURRENT_TIME"\n当前温度:"$TEMPERATURE | mutt -s "电子秤 $HOSTNAME 温度上报" test@qq.com

给脚本赋予可执行权限

  1. chmod 777 temperate.sh

配置定时任务

  1. vim /etc/crontab
  2. #在文件最后加上下面一行
  3. #每2分钟获取树莓派温度并发送到邮箱
  4. */5 * * * * pi bash /home/pi/Program/shell/ temperate.sh
  5. #每隔10分钟,发送一次设备地址
  6. 0 */1 * * * pi bash /home/pi/Program/shell/sendip.sh
  7. #锁定设备定时任务,每5分钟执行一次
  8. */30 * * * * pi bash /home/pi/Program/shell/updatedevice.sh

保存即可