Linux命令---定时任务(crontab)

博客介绍了使用crontab定时执行.py文件和.sh文件的方法,同时提醒在使用crontab定时执行脚本时要进行输出重定向,还提及了常用场景,并给出了相关参考链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值