Linux使用crontab设置定时任务

熟悉Linux下的定时任务

当我们使用了Linux系统,想定时做一些事情,怎么办?

1.Linux定时任务说明

当安装完成Linux操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

2.命令语法

  • 格式:
crontab (选项) (参数)
  • 常用命令
//列出某个用户cron服务的详细内容
crontab -l

//删除某个用户的cron服务
crontab -r

//编辑某个用户的cron服务
crontab -e

3.设置定时任务的格式

  • 格式:

crontab文件的含义:用户所建立的crontab文件中,每一行都代表一项任务,

每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

# 顺序:分 时 日 月 周
minute   hour   day   month   week   command

其中:

  • minute: 表示分钟,可以是从0到59之间的任何整数。
  • hour:表示小时,可以是从0到23之间的任何整数。
  • day:表示日期,可以是从1到31之间的任何整数。
  • month:表示月份,可以是从1到12之间的任何整数。
  • week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。(或使用星期的英文简写如 sun、mon 等等)
  • command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

在以上各个字段中,还可以使用以下特殊字符:

  • 星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
  • 逗号(,):可以用逗号隔开的值指定一个列表范围,例如,"1,2,5,7,8,9"
  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如"2-6"表示"2,3,4,5,6"
  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如"0-23/2"表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

4.crontab服务

一般不需要操作这一步,知道就可以了。

  • 启动服务
/sbin/service crond start
  • 关闭服务
/sbin/service crond stop
  • 重启服务
/sbin/service crond restart
  • 重新载入配置
/sbin/service crond reload
  • 查看crontab服务状态
/sbin/service crond status

5.时间配置样例

每1分钟执行一次command

* * * * * command

每小时的第3和第15分钟执行

3,15 * * * * command

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

3,15 8-11 * * * command

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

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

每个星期一的上午8点到11点的第3和第15分钟执行

3,15 8-11 * * 1 command

每晚的21:30重启smb

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

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

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

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

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

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

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

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

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

每一小时重启smb

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

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

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

每月的4号与每周一到周三的11点重启smb

0 11 4 * mon-wed /etc/init.d/smb restart

一月一号的4点重启smb

0 4 1 jan * /etc/init.d/smb restart

6.调试写日志

比如每10分钟执行一次,然后为了调试成功,先输出到一个日志文件。

*/10 * * * * (source ~/.bash_profile;cd /home/testerzhang/lab; sh -x test.sh) >>/home/testerzhang/cron.log 2>&1

调试完毕后,不想输出日志,可以这样写。

*/10 * * * * (source ~/.bash_profile;cd /home/testerzhang/lab; sh -x test.sh) >/dev/null 2>&1

本文没有授权给任何组织、企业和个人转载,未经作者允许禁止转载!

欢迎关注我的公众号testerzhang,原创技术文章第一时间推送。

公众号二维码

updatedupdated2021-07-052021-07-05