首页 > 技术文章 > Linux 定时任务 crontab

mianbaoshu 2020-12-16 17:49 原文

来自:https://www.runoob.com/w3cnote/linux-crontab-tasks.html

linux内置的cron进程搭配shell脚本可以实现非常复杂的定时指令。

cron介绍

crontab命令是cron table的简写,它是cron的配置文件,也可以叫它作业列表,我们可以在以下文件夹内找到相关配置文件。

  • /var/spool/cron/ 目录下存放的是每个用户包括root的crontab任务,每个任务以创建者的名字命名 (需要使用root权限查看)
  • /etc/crontab 这个文件负责调度各种管理和维护任务。
  • /etc/cron.d/ 这个目录用来存放任何要执行的crontab文件或脚本。
  • 我们还可以把脚本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目录中,让它每小时/天/星期、月执行一次。

ubuntu 查看crontab运行日志

Ubuntu服务器/var/log下没有cron日志,这里记录一下如何ubuntu server如何查看crontab日志

修改rsyslog

sudo vim /etc/rsyslog.d/50-default.conf

cron.*              /var/log/cron.log #将cron前面的注释符去掉 

重启rsyslog

sudo  service rsyslog  restart

sudo service cron restart

查看crontab日志

less  /var/log/cron.log 

crontab的使用

我们常用的命令如下:

crontab [-u username]    //省略用户表表示操作当前用户的crontab
    -e      (编辑工作表)
    -l      (列出工作表里的命令)
    -r      (删除工作作)

我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面。每行是一条命令。

crontab的命令构成为 时间+动作,其时间有分、时、日、月、周五种,操作符有

  • * 取值范围内的所有数字
  • / 每过多少个数字
  • - 从X到Z
  • 散列数字

其他相关:

@reboot  Run once, at startup.
@yearly  Run once a year, “0 0 1 1 *”.
@annually   (same as @yearly)
@monthly   Run once a month, “0 0 1 * *”.
@weekly   Run once a week, “0 0 * * 0”.
@daily   Run once a day, “0 0 * * *”.
@midnight   (same as @daily)
@hourly   Run once an hour, “0 * * * *”.

linux下nano修改并保存

保存和退出:

如果你要保存所做的修改,按下Ctrl+O。想要退出,按下Ctrl+X。如果你退出前没有保存所做的修改,它会提示你是否要保存。如果不要,请按N,反之,则按Y。然后它会让你确认要保存的文件名,确认或修改后按Enter即可。

剪切和粘贴:

要剪切一整行,请用Ctrl+K(按住Ctrl不放,再按下K键)。光标所在的行便消失了。要粘贴它,只需把光标移动到您所要粘贴的位置,然后按Ctrl+U即可。要移动多行,只需多按几次Ctrl+K把需要移动内容都剪切下来,然后按一次Ctrl+U就可以把刚剪切的内容全部粘贴上来。

实例

实例1:每1分钟执行一次myCommand

* * * * * myCommand

实例2:每小时的第3和第15分钟执行

3,15 * * * * myCommand

实例3:在上午8点到11点的第3和第15分钟执行

3,15 8-11 * * * myCommand

实例4:每隔两天的上午8点到11点的第3和第15分钟执行

3,15 8-11 */2  *  * myCommand

实例5:每周一上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 myCommand

实例6:每晚的21:30重启smb

30 21 * * * /etc/init.d/smb restart

实例7:每月1、10、22日的4 : 45重启smb

45 4 1,10,22 * * /etc/init.d/smb restart

实例8:每周六、周日的1 : 10重启smb

10 1 * * 6,0 /etc/init.d/smb restart

实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

0,30 18-23 * * * /etc/init.d/smb restart

实例10:每星期六的晚上11 : 00 pm重启smb

0 23 * * 6 /etc/init.d/smb restart

实例11:每一小时重启smb

* */1 * * * /etc/init.d/smb restart

实例12:晚上11点到早上7点之间,每隔一小时重启smb

* 23-7/1 * * * /etc/init.d/smb restart

将Crontab中的命令输出按照当前日期进行存储,%号前要转义

 0 22 * * 7 mysqldump -uroot -p*** vpu >/mnt/vpu_streams/testtools/Backup_21_Vpu_DB/Dump$(date +\%Y_\%m_\%d)_21vpu.sql 

******定时任务书写要领******

要领1:定时任务要加注释

要领2:定时任务命令或脚本结尾加 &>/dev/null 或 >/dev/null 2>&1 或 1>/dev/null 2>/dev/null

要领3:定时任务执行shell脚本前加/bin/sh,定时任务执行shell脚本不必添加执行权限

要领4:定时任务命令或程序尽量写到脚本里,定时任务只要执行脚本即可

         注意操作步骤:

  (1)、命令行执行

  (2)、编写脚本

  (3)、测试脚本

  (4)、设置定时任务

要领5:生产任务程序不要随意打印输出信息

要领6:定时任务执行的脚本要规范路径 (例如 /server/script)

要领7:配置定时任务要规范操作过程

要领8:定时任务执行特殊的字符需要进行转义,否则会报错,例如 百分号% 转义 \%

要领9:定时任务脚本中如果涉及使用到环境变量,必须在脚本中重新定义,不然,定时任务识别不了

参考:https://www.cnblogs.com/nixiansen/p/11271843.html
https://blog.csdn.net/w6611415/article/details/51736236





推荐阅读