Linux 下执行定时任务 crontab 命令详解

Crontab 定时任务配置指南

0x01 先来一个小小的例子

查看当前路径:

[root@root test]# pwd
/home/admin/test

查看当前用户的定时任务,也可以使用 crontab -uroot -l 查看指定用户的定时任务。千万不要忘了中间的 sh 表示用户拿什么来执行命令。

[root@root test]# crontab -l
00 02 * * * sh /home/admin/optbash/dailyBackup.sh
00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh

建立一个用定时任务运行的 bash 脚本:

[root@root test]# touch test.sh
[root@root test]# vim test.sh

编辑如下内容,将系统当前时间输出到 console.txt 文件,然后保存并增加可执行权限:

/bin/echo `date` > /home/admin/test/console.txt

查看文件权限:

[root@root test]# ll
-rw-r--r-- 1 root root 29 Mar 27 21:31 console.txt
-rwxr-xr-x 1 root root 48 Mar 27 21:28 test.sh

增加可执行权限:

[root@root test]# chmod +x ./test.sh

追加 crontab 定时任务,每分钟触发:

[root@root test]# crontab -e

添加以下内容:

00 02 * * * sh /home/admin/optbash/dailyBackup.sh
00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh
* * * * * sh /home/admin/test/test.sh

前面是已经存在的定时任务,后面执行 test.sh 脚本的是新追加的。保存后提示已经装载了新的定时任务:

"/tmp/crontab.HauiiV" 3L, 143C written
crontab: installing new crontab

再次查看定时任务列表,可以看到定时任务已经添加:

[root@root test]# crontab -l
00 02 * * * sh /home/admin/optbash/dailyBackup.sh
00 02 * * * sh /home/admin/optbash/deleteDebugSql.sh
* * * * * sh /home/admin/test/test.sh

查看 console.txt 是否每分钟写入一次:

[root@root test]# vim console.txt
Fri Mar 27 21:40:01 EDT 2015

可以看到最近一次的写入时间。

0x02 看看 crontab 的时间表达式

基本格式:

*  *  *  *  *  command
分  时   日   月   周      命令

然后来几个实际的例子:

  1. 每分钟执行一次:

    * * * * *
  2. 每隔一小时执行一次:

    00 * * * * *

    * */1 * * * (/表示频率)
  3. 每小时的 15 和 30 分各执行一次:

    15,45 * * * * (,表示并列)
  4. 在每天上午 8-11 时中间每小时的 15 和 45 分各执行一次:

    15,45 8-11 * * * command (-表示范围)
  5. 每个星期一的上午 8 点到 11 点的第 3 和第 15 分钟执行:

    3,15 8-11 * * 1 command
  6. 每隔两天的上午 8 点到 11 点的第 3 和第 15 分钟执行:

    3,15 8-11 */2 * * command
  7. 在每天的下午 17:01 执行一次 reboot 重启服务器操作:

    1 17 * * * root reboot

0x03 其他命令介绍

名称:crontab

使用权限:所有使用者

使用方式:

  • crontab file [-u user]:用指定的文件替代目前的 crontab。
  • crontab [-u user]:用标准输入替代目前的 crontab。
  • crontab -l [user]:列出用户目前的 crontab。
  • crontab -e [user]:编辑用户目前的 crontab。
  • crontab -d [user]:删除用户目前的 crontab。
  • crontab -c dir:指定 crontab 的目录。

0x04 crond 安装与配置服务

安装 crontab:

yum install crontabs

服务操作说明:

  • /sbin/service crond start:启动服务
  • /sbin/service crond stop:关闭服务
  • /sbin/service crond restart:重启服务
  • /sbin/service crond reload:重新载入配置

查看 crontab 服务状态:

service crond status

手动启动 crontab 服务:

service crond start

查看 crontab 服务是否已设置为开机启动,执行命令:

ntsysv

加入开机自动启动:

chkconfig –level 35 crond on

对于 CentOS 7 systemd 配置

yum install vixie-cron
yum install crontabs

/bin/systemctl restart crond.service  # 启动服务
/bin/systemctl reload crond.service  # 重新载入配置
/bin/systemctl status crond.service  # 查看 crontab 服务状态

编辑完配置文件后,重新重启一下 cron 的任务:

systemctl restart crond.service

对于 Ubuntu 18.04

service cron status  # 查看 cron 的状态
service cron restart  # 重启 crontab 服务

这两个命令通用:

systemctl restart cron
systemctl status cron

与 CentOS 7 不同在于 croncrond 之间的区别,差一个字母。


上一篇
下一篇