Linux定时任务 crontab
- 基础命令
- 18天前
- 33热度
- 0评论
crond 是linux用来定期执行程序的命令。
当安装完成操作系统之后,默认便会启动此任务调度命令。
crond命令每分锺会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。
**注意:**新创建的 cron 任务,不会马上执行,至少要过 2分钟后才可以,当然你可以重启 cron 来马上执行。
1、启动服务
启动crontab服务
# service cron start
查看服务是否已经运行用
# ps -ax | grep cron
centos7及以上
systemctl status crond
systemctl start crond
systemctl stop crond
systemctl enable crond
2、常见操作
当前用户下操作
# crontab -e 查看当前用户下所有的定时任务
# crontab -l 删除当前用户所有的定时任务
# crontab -r 查看当前用户下的定时任务
指定某个用户操作
# crontab -u zhangsan -l 查看指定用户下的定时任务
相关配置文件
/var/spool/cron/root (以用户命名的文件) 是所有默认存放定时任务的文件
/etc/cron.deny 该文件中所列出用户不允许使用crontab命令
/etc/cron.allow 该文件中所列出用户允许使用crontab命令,且优先级高于/etc/cron.deny
/var/log/cron 该文件存放cron服务的日志
3、语法详解
时间设置分为5段,精确到分钟,不能精确到秒级。
第6段为用户命令,一般省略用户,表示当前用户。
分 小时 日 月 星期 命令
0-59 0-23 1-31 1-12 0-6 command
第1列表示分钟0~59 每分钟用*或者 */1表示
第2列表示小时0~23(0表示0点)
第3列表示日期1~31
第4列表示月份1~12
第5列标识号星期0~6(0表示星期天)
第6列要运行的命令
记住几个特殊符号的含义:
“*”代表取值范围内的数字,
“/”代表”每”,
“-”代表从某个数字到某个数字,
“,”分开几个离散的数字
示范例子
分 时 天 月 星期
5 * * * * ls 指定每小时的第5分钟执行一次ls命令
30 5 * * * ls 指定每天的 5:30 执行ls命令
30 7 8 * * ls 指定每月8号的7:30分执行ls命令
30 5 8 6 * ls 指定每年的6月8日5:30执行ls命令
30 6 * * 0 ls 指定每星期日的6:30执行ls命令[0表示星期天,1表示星期1,也可以用英文来表示,sun表示星期天,mon表示星期一]
30 3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
25 8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
30 6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]
指定用户
50 7 * * * root run-parts /etc/cron.daily 每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件[ 注:run-parts参数表示,执行后面目录中的所有可执行文件。
4、常见错误
4.1、脚本无法执行
现象:用 crontab 来定时执行脚本,无法执行,但是如果直接通过命令(如:./test.sh)又可以正常执行。
原因:环境变量不对
解决:
1. 脚本中的命令使用绝对命令,如:/usr/local/bin/docker
2. 脚本开头加入环境变量:
#!/bin/bash
source /etc/profile