1.创建定时任务:
[root@localhost ~]# crontab -e
2.查看定时任务:
[root@localhost ~]# crontab -l
3.删除定时任务:
[root@localhost ~]# crontab -r
4.编辑定时任务:
用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:minute hour day month week command
即:是“分 时 日 月 周 命令”。当分为*时,表示每分钟执行一次,时为*时,表示每小时执行一次。
*/1 * * * * ls >> /home/test
*/1 * * * * ls >> /home/test 2>&1
每五分钟执行 */5 * * * *
每小时执行 0 * * * *
每天执行 0 0 * * *
每周执行 0 0 * * 0
每月执行 0 0 1 * *
每年执行 0 0 1 1 *
*/10 * * * * python /root/a.py >> /www/a.log 2>&1 // 每隔10分钟,执行一次
30 * * * * python /root/a.py >> /www/a.log 2>&1 // 每小时, 第30分钟执行
//参考:https://www.cnblogs.com/zeze/p/8178948.html
//参考:https://www.cnblogs.com/phpstudy2015-6/p/7534968.html
//参考:https://www.cnblogs.com/intval/p/5763929.html
//参考:https://blog.youkuaiyun.com/jiedao_liyk/article/details/59483905
//参考:https://blog.youkuaiyun.com/qq_33274797/article/details/80938962
定时执行.py文件
1.在home目录下面创建a.py文件
[root@localhost home]# touch a.py
2.编辑a.py文件内容:print("能打印吗?")
3.测试能否正常输出:
[root@localhost home]# python a.py>>out.log
4.创建定时任务:
[root@localhost home]# crontab -e
5.编辑定时任务:
*/1 * * * * python /home/a.py >> /home/b.log
*/1 * * * * python /home/a.py >> /home/b.log 2>&1
6.查看结果:
[root@localhost home]# cat b.log
//参考:https://blog.youkuaiyun.com/qq_36743482/article/details/83616436
定时执行.sh文件
1.在home目录下面创建a.sh文件
[root@localhost home]# touch a.sh
2.编辑a.sh文件的内容:
python /home/a.py >> /home/c.log
3.修改a.sh文件的权限:
[root@localhost home]# chmod 777 a.sh
4.创建定时任务:
[root@localhost home]# crontab -e
5.编辑定时任务:
*/1 * * * * sh /home/a.sh >> /home/result.log 2>&1
6.查看结果:
[root@localhost home]# cat c.log
//附加:虽然a.py文件与a.sh文件在同一目录下,但是也需要加上/home,因为crontab的默认执行路径为:当前用户的根路径,即/root。
使用crontab定时执行脚本时别忘了输出重定向>
1.如果crontab不重定向输出,并且crontab所执行的命令有输出内容的话,是一件非常危险的事情。
因为该输出内容会以邮件的形式发送给用户,内容存储在邮件文件/var/spool/mail/$user
使用:cat /dev/null>root,把这个文件清空。或者使用:echo /dev/null>/var/spool/mail/root 清空文件。
2.如果命令执行比较频繁(如每分钟一次),或者命令输出内容较多,会使这个邮件文件不断追加内容,文件越来越大。
而邮件文件一般存放在根分区,根分区一般相对较小,所以会造成根分区写满而无法登录服务器。
3.所以在添加crontab命令时,无论命令是否有输出,最好都加上输出重定向到文件或者/dev/null中。如下
*/5 * * * * /root/XXXX.sh &>/dev/null 2>&1
4.解释命令:
/dev/null 代表空设备文件
> 代表重定向到哪里,例如:echo "123" > /home/123.txt
1 表示stdout标准输出,系统默认值是1,所以">/dev/null"等同于"1>/dev/null"
2 表示stderr标准错误
& 表示等同于的意思,2>&1,表示2的输出重定向等同于1
那么>/dev/null 2>&1的意思就是:
标准输出重定向到空设备文件,也就是不输出任何信息到终端。
标准错误输出重定向等同于标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也重定向到空设备文件。
附加:
Linux定时任务crontab中命令不输出与输出到/dev/null有什么不同?
只是同步时间的话,没有太大区别
第一条,执行会有输出,当然,ntpdate是不会记录输出到文件的,当crontab调用时,错误和标准输出会写成mail通知你。
第二条,标准输出重定向到/dev/null,关于/dev/null,你可以查一下资料看看详细的解释,我们把它理解为一个空文件吧,输出到这里就找不回来了。
第三条,与第二条类似,2>&1是指将标准信息输出路径指定为错误信息输出路径,那么标准输出和错误输出都重定向到/dev/null,也就是不记录任何信息了。
常用场景
备份数据库
https://www.cnblogs.com/apollo1616/p/10436903.html
https://www.cnblogs.com/dreamowneryong/p/5622739.html
https://www.cnblogs.com/aminxu/p/5993769.html
https://www.cnblogs.com/MartinChentf/p/6060252.html