AI工具人
提示词工程师

linux crontab详解(linux如何设置定时任务)

  自己租用了一台阿里云的服务器,然后是按流量收费的,结果发现这天每个小时都有接近600m的公网流量流出,而且每个时段都一致,如果再这样下去,一年得花5k来养活这台机器。。。经过各种排查,发现主要是某个ip流出的流量过多,从阿里云管理控制台禁用该ip后,流量立马下来。 开始怀疑是我服务器被攻击,最后发现其实是我博客链接推动到百度的定时任务写错了,我想的是每天推送一次的,结果每分推送一次。。(话说我一分钟推送一次所有博文链接,百度到现在一篇都不给我收录)。 所以在这里我想介绍下linux定时任务的设置,主要是crontab命令。

crontab  

  crontab算是linux shell里参数较少的几个命令之一了,只有 [ -u user ] [ -i ] { -e | -l | -r },我来分别介绍下这几个参数。

  • crontab -u user  指定用户为user,如果在使用过程中不加-u user默认就是当前登陆用户。
  • crontab -e  e是edit,编辑当前用户的定时任务。
  • crontab -l  l是list,列出当前用户所有定时任务。
  • crontab -r  r是remove,删除当前用户所有定时任务。
  • crontab -i -r  -i其实没多大用,和-r搭配使用,和纯-r不同的是,加了-i 删除前需要你确认一次。

crontab的语法格式

  crontab的格式很简单,* * * * * shell; 这几个星号分别代表时间,然后星号后面直接跟你需要定时直接的命令,如果你命令太长,你可以把脚本写到文件里,然后执行这个文件。

  • 第一个星号 minute 分钟,值为0-59。
  • 第二个星号 hour 小时,值从0-23。
  • 第三个星号 day 天,值为从1-31。
  • 第四个星号 month 月,值为从1-12月,或者简写的英文,比如Nov、Feb等。
  • 第五个星号 week 周,值为从0-6或者简写的英文,Wen、Tur等,代表周几,其中0代表周末。
  • 所有位置都可以用,表示每个,比如你第三个号位置不写具体的某一天,那么表示每天都执行。
  • 还有一种方式是 */2 或 */3……表示每2(分|小时|天|月|周)或者表示每3(分|小时|天|月|周)执行一次,这里还可以是其他值。

我平时的记忆方式为 分 时 日 月 周,这几个字读顺口就很难忘掉了。为了大家更容易理解,我直接来几个例子。

0 0 * * * rm -rf /tmp/*;  #每天0点0分删除/tmp/下所有文件  
59 12 15 * * reboot; #每月15号12点59分重启系统
*/30 * * * * sh /root/abc.sh; #每隔30分执行下/root/abc.sh文件 
0 12 */10 * * uptime >> /root/uptime.txt; #每隔10天的12点,把uptime执行的结果写入/root/uptime.txt

有几点需要注意的。

  • 你创建定时任务时所使用的用户需要有权限执行改定时任务,如果没有请以root用户添加定时任务。
  • 如果你在系统里的用户被删除,你这个用户所拥有的定时任务也会被删除。
  • 我想想,好像木有了,哈哈!

/etc/cron.d/

  我们除了直接使crontab命令之外,还可以把定时任务写到/etc/cron.d/下,随便新建个文件,按crontab的语法格式把定时任务写进去就好了,系统就会直接给你按时调度的,但要注意的是,你写进去的任务都是以root用户的权限调度的,如果想以其他用户调取,可以在5个星号后面加用户名,比如0 12 */10 * * ixindoo uptime >> /root/uptime.txt; 以ixindoo执行 uptime这个命令。

  暂时就写这么多了,以后想到再补充。。。。

赞(0) 打赏
未经允许不得转载:XINDOO » linux crontab详解(linux如何设置定时任务)

评论 抢沙发

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续给力更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册