相关文章
https://www.runoob.com/linux/linux-comm-crontab.html
https://linux265.com/news/3099.html
crond 命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
注意:新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
而 linux 任务调度的工作主要分为以下两类:
1、系统执行的工作:系统周期性所要执行的工作,如备份系统数据、清理缓存
2、个人执行的工作:某个用户定期要做的工作,例如每隔 10 分钟检查邮件服务器是否有新信,这些工作可由每个用户自行设置
crontab 主要命令
crontab --e : 编辑 crontab 文件. 如果文件不存在会自动创建。
crontab --l : 显示 crontab 文件。
crontab -r : 删除 crontab 文件。
crontab -ir : 删除 crontab 文件前提醒用户。
shell
crontab -l
1 8-23 * * * /Users/xx/Documents/repos/notes/auto_commit.sh
1 8,12,17 * * * /Users/xx/Documents/code/qnecode/data_refresh/autorefresh.sh
自动提交 git
脚本
shell
cd /Users/xx/Documents/repos/notes
git add .
git commit -a -m '--'
echo $(date +%Y-%m-%d\ %H:%M:%S) - commit notes >> /Users/xx/Documents/repos/notes_commit.txt
git pull
# echo '-- pull end'
sleep 5
# git push
git push https://usename:password@gitee.com/xxx/notes.git master
# echo '-- push end'
时间格式说明
时间格式如下:
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...个小时要执行,其馀类推
shell
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
使用示例
shell
# 每一分钟执行一次 `/bin/ls:
* * * * * `/bin/ls
# 每5分钟运行一次命令
*/5 * * * * `/root/bin/check-status.sh
# 每小时的第一分执行 `/home/bruce/backup这个文件
1 * * * * `/home/bruce/backup
# 每天 8、12、17 第一分钟 执行脚本
1 8,12,17 * * * /Users/xx/autorefresh.sh
# 每天 8-23点 第一分钟,执行脚本
1 8-23 * * * /Users/xx/auto_commit.sh
# 每两个小时重启一次apache
0 */2 * * * `/sbin/service httpd restart
# 每天7:50开启ssh服务
50 7 * * * `/sbin/service sshd start
# 每天22:50关闭ssh服务
50 22 * * * `/sbin/service sshd stop
# 在 12:01 a.m 运行,即每天凌晨过一分钟。
# 这是一个恰当的进行备份的时间,因为此时系统负载不大。
1 0 * * * `/root/bin/backup.sh
# 每月1号和15号检查/home 磁盘
0 0 1,15 * * fsck `/home
# 每月的1、11、21、31日是的 6:30 执行一次ls命令
30 6 */10 * * ls
# 每月每天的 0 点 20 分, 2 点 20 分, 4 点 20 分....执行 echo "haha":
20 0-23/2 * * * echo "haha"
# 在 第 12 月内, 每天的早上 6 点到 12 点,每隔 3 个小时 0 分钟执行一次 `/usr/bin/backup:
0 6-12/3 * 12 * `/usr/bin/backup
# 每周六、周日的3点10分执行hello程序。
10 3 * * 0,6 hello
# 从周四到周六的4点15点执行hello程序。
15 4 * * 4-6 hello
# 周一到周五每天下午 5:00 寄一封信给 alex@domain.name:
0 17 * * 1-5 mail -s "hi" alex@domain.name < `/tmp/maildata
# 每周一至周五3点钟,在目录/home中,查找文件名为*.xxx的文件,并删除4天前的文件。
00 03 * * 1-5 find `/home "*.xxx" -mtime +4 -exec rm {} \;
# 每个工作日(Mon -- Fri) 11:59 p.m 都进行备份作业。
59 11 * * 1,2,3,4,5 `/root/bin/backup.sh
# 下面例子与上面的例子效果一样:
59 11 * * 1-5 `/root/bin/backup.sh
# 每个月的第一天 1:10 p.m 运行
10 13 1 * * `/root/bin/full-backup.sh
# 每个工作日 11 p.m 运行。
0 23 * * 1-5 `/root/bin/incremental-backup.sh
# 8-23点之内,每小时的第一分钟执行一次脚本
1 8-23 * * * `/Users/xx/repos/abc/auto_commit.sh