Linux crontab命令:循环执行定时任务

在介绍 crontab 命令之前,我们首先要介绍一下 crond,因为 crontab 命令需要 crond 服务支持。crond 是 Linux 下用来周期地执行某种任务或等待处理某些事件的一个守护进程

 

crontab命令介绍

crontab 命令是通过 /etc/cron.allow 和 /etc/cron.deny 文件来限制某些用户是否可以使用 crontab 命令的。

  • 当系统中有 /etc/cron.allow 文件时,只有写入此文件的用户可以使用 crontab 命令,没有写入的用户不能使用 crontab 命令。同样,如果有此文件,/etc/cron.deny 文件会被忽略,因为 /etc/cron.allow 文件的优先级更高。
  • 当系统中只有 /etc/cron.deny 文件时,写入此文件的用户不能使用 crontab 命令,没有写入文件的用户可以使用 crontab 命令。
  • 这个规则基本和 at 命令的规则一致,同样是 /etc/cron.allow 文件比 /etc/cron.deny 文件的优先级高,Linux 系统中默认只有 /etc/cron.deny 文件。

每个用户都可以实现自己的 crontab 定时任务,只需使用这个用户身份执行“crontab -e”命令即可。当然,这个用户不能写入 /etc/cron.deny 文件。

crontab举例
时间含义
45 22 ***命令在 22 点 45 分执行命令
0 17 ** 1命令在每周一的 17 点 0 分执行命令
0 5 1,15**命令在每月 1 日和 15 日的凌晨 5 点 0 分执行命令
40 4 ** 1-5命令在每周一到周五的凌晨 4 点 40 分执行命令
*/10 4 ***命令在每天的凌晨 4 点,每隔 10 分钟执行一次命令
0 0 1,15 * 1命令在每月 1 日和 15 日,每周一个 0 点 0 分都会执行命令,注意:星期几和几日最好不要同时出现,因为它们定义的都是天,非常容易让管理员混淆

crontab命令格式

crontab 命令的基本格式如下:

[root@localhost ~]# crontab [选项] [file]

注意,这里的 file 指的是命令文件的名字,表示将 file 作为 crontab 的任务列表文件并载入 crontab,若在命令行中未指定文件名,则此命令将接受标准输入(键盘)上键入的命令,并将它们键入 crontab。

选项功能
-u user用来设定某个用户的 crontab 服务,例如 "-u demo" 表示设备 demo
用户的 crontab 服务,此选项一般有 root 用户来运行。
-e编辑某个用户的 crontab 文件内容。如果不指定用户,则表示编辑当前用户的 crontab 文件。
-l显示某用户的 crontab 文件内容,如果不指定用户,则表示显示当前用户的 crontab 文件内容。
-r 从 /var/spool/cron 删除某用户的 crontab 文件,如果不指定用户,则默认删除当前用户的 crontab 文件。 
-i在删除用户的 crontab 文件时,给确认提示。

其实 crontab 定时任务非常简单,只需执行“crontab -e”命令,然后输入想要定时执行的任务即可。不过,当我们执行“crontab -e”命令时,打开的是一个空文件,而且操作方法和 Vim 是一致的。那么,这个文件的格式才是我们真正需要学习的内容。文件格式如下:

[root@localhost !]# crontab -e
#进入 crontab 编辑界面。会打开Vim编辑你的任务
* * * * * 执行的任务

文件中是通过 5 个“*”来确定命令或任务的执行时间的,这 5 个“*”的具体含义:

项目含义范围
第一个"*"一小时当中的第几分钟(minute)0~59
第二个"*"一天当中的第几小时(hour)0~23
第三个"*"一个月当中的第几天(day)1~31
第四个"*"一年当中的第几个月(month)1~12
第五个"*"一周当中的星期几(week)0~7(0和7都代表星期日)


在时间表示中,还有一些特殊符号需要学习,如表 3 所示。

时间特殊符号
特殊符号含义
*(星号)代表任何时间。比如第一个"*"就代表一小时种每分钟都执行一次的意思。
,(逗号)代表不连续的时间。比如"0 8,12,16***命令"就代表在每天的 8 点 0 分、12 点 0 分、16 点 0 分都执行一次命令。
-(中杠)代表连续的时间范围。比如"0 5 ** 1-6命令",代表在周一到周六的凌晨 5 点 0 分执行命令。
/(正斜线)代表每隔多久执行一次。比如"*/10****命令",代表每隔 10 分钟就执行一次命令。

 

 

无法启动定时任务原因

查看报错: No command ‘crond’ found

  1. 安装 cron:
    sudo apt-get install cron
  2. 检测你的service路径

    #: which service
    
    /usr/sbin/service
  3. 执行相关 cron命令,带上路径 /usr/sbin/service

    sudo /usr/sbin/service cron start
    
    start: Job is already running: cron
  4. cron检查及相关命令:

    #通常你可以通过执行命令 ps -ef | grep cron查看 cron命令是否正在运行
    
    ps -ef | grep cron
    
    root      1096     1  0 10:40 ?        00:00:00 cron
    
    root      2155 62366  0 10:45 pts/1    00:00:00 grep --color=auto cron
    
    
    #执行命令 sudo /usr/sbin/service cron status , 查看crontab服务状态
    
    root@ubuntu4146:/data/gitlabData/backups# sudo /usr/sbin/service cron status
    
    cron start/running, process 1096
    
    
    #执行命令 sudo /usr/sbin/service cron reload 重新 cron 服务配置
    
    root@ubuntu4146:/data/gitlabData/backups# sudo /usr/sbin/service cron reload
    
    
    #执行命令 sudo /usr/sbin/service cron restart , 重新启动 cron 服务
    
    root@ubuntu4146:/data/gitlabData/backups# sudo /usr/sbin/service cron restart
    
    cron stop/waiting
    
    cron start/running, process 1096
    
    
    #执行命令 sudo /usr/sbin/service cron stop , 停止 cron 服务
    
    root@ubuntu4146:/data/gitlabData/backups# sudo /usr/sbin/service cron stop
    
    cron stop/waiting

    这样就会正常运行定时任务了。

no crontab for root 问题解决方法 

[root@localhost ~]# crontab -l
no crontab for root

在 root 用户下输入 crontab -e

按 Esc 按: wq   回车

在输入 crontab -l 就没有问题了

主要原因是由于这个liunx服务器 第一次使用 crontab ,还没有生成对应的文件导致的,执行了 编辑(crontab -e)后 就生成了这个文件
 

如何通过非交互式进行crontab

 root@centos-mysql01:~# 
(echo "0 0 * * * sh /data/bak_everyday.sh > /dev/null 2>&1 ") | crontab

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Aiky哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值