在介绍 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 文件。
时间 | 含义 |
---|---|
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
- 安装 cron:
sudo apt-get install cron
-
检测你的service路径
#: which service /usr/sbin/service
-
执行相关 cron命令,带上路径 /usr/sbin/service
sudo /usr/sbin/service cron start start: Job is already running: cron
-
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
文章评论