手把手教你crontab排障

本文详细介绍了Linux下的Crond服务与Crontab配置,包括它们如何实现周期性任务调度,crontab配置文件的格式及含义,以及crond服务的启动与管理方法。此外还提供了排查crontab定时任务不执行问题的步骤。

导读crond是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。Linux下的任务调度分为两类,系统任务调度和用户任务调度。系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

手把手教你crontab排障手把手教你crontab排障

crontab 配置文件
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# .—————- minute (0 – 59)
# | .————- hour (0 – 23)
# | | .———- day of month (1 – 31)
# | | | .——- month (1 – 12) OR jan,feb,mar,apr …
# | | | | .—- day of week (0 – 6) (Sunday=0 or 7) OR
#sun,mon,tue,wed,thu,fri,sat
# | | | | |
# m h dom mon dow command
# * * * * * command will be executed

例如:

*/5 * * * * root /usr/libexec/atrun

minute(m) : 代表一小时内的第几分,范围 0-59。
hour (h) : 代表一天中的第几小时,范围 0-23。
mday (dom) : 代表一个月中的第几天,范围 1-31。
month(mon) : 代表一年中第几个月,范围 1-12。
wday (dow) : 代表星期几,范围 0-7 (0及7都是星期天)。
who : 要使用什么身份执行该指令,当您使用 crontab -e 时,不必加此字段。
command(command):所要执行的指令。

crond 开机启动
crond 启动/关闭脚本
/etc/init.d/crond help
Usage: /etc/init.d/crond {start|stop|status|restart|condrestart|try-restart|reload|force-reload}
crond 加入到开机启动
chkconfig crond on

crontab定时任务不执行问题

crontab定时任务不执行问题

排查原因步骤如下:

首先,确认服务器是否开启定时任务计划服务,只有root用户才能对crond服务进行开启和关闭

[root@mimvp-bj script]# service crond status
crond is stopped
[root@mimvp-bj script]# service crond start
Starting crond: [ OK ]
[root@mimvp-bj script]# service crond status
crond (pid 24577) is running…

请确保crond状态为 is running…

如果crond状态为 crond is stopped ,则定时任务服务不会生效故无法执行,我遇到的crontab不执行就是这个原因

crontab 常见错误的几个问题

编辑 crontab :

crontab -e

# m h dom mon dow command
SHELL=/bin/bash
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh

Ctrl + O (写入)——》 Enter键(保存文件名)——》 Ctrl + X(退出)

输入查看命令:

crontab -l

# m h dom mon dow command
SHELL=/bin/bash
30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(推荐用此方式)
如果遇到shell语法错误
Syntax error: "(" unexpected

解决方法:

需指定shell解释器命令:SHELL=/bin/bash(请参见上面 crontab编辑示例 SHELL=/bin/bash)

或者参见: LINUX – BASH Syntax Error

如果遇到路径错误

在 /var/spool/crontab/yanggang 中,添加了如下命令,在日志文件 /var/spool/mail/yanggang 中提示找不到 xxx.sh 路径

30 * * * * /home/barry/top800/top10/top10_fruits/top10_all.sh

30 * * * * bash /home/barry/top800/top10/top10_fruits/top10_all.sh

这是因为你在crontab中使用了绝对路径执行脚本 top10_all.sh,因此在脚本 top10_all.sh 中引用的其它脚本也都需要使用绝对路径,才能被crontab找到并执行。

那么该如何避免绝对路径呢,推荐采用如下格式:

30 * * * * cd /home/barry/top800/top10/top10_fruits/ && ./top10_all.sh(推荐用此方式)

先进入该目录,然后在执行脚本;否则,执行脚本中的其它脚本都需要加绝对路径



本文地址: http://www.linuxprobe.com/crontab-tshoot.html

免费提供最新Linux技术教程书籍,为开源技术爱好者努力做得更多更好:http://www.linuxprobe.com/thread

### Crontab 使用程 #### 了解 Cron 和 Crontab Crontab 是 Unix 和类 Unix 操作系统(如 Linux)中的一个重要工具,用于定时任务调度。其核心是一个名为 `cron` 的守护进程,负责按照预定的时间间隔执行特定的任务[^3]。 #### 验证 Cron 服务状态 为了确保能够正常使用 crontab 功能,首先要验证系统的 cron 服务是否已经启动并运行正常。可以通过如下命令检查: ```bash service crond status ``` 如果发现未安装,则可以根据具体的操作系统版本通过包管理器进行安装。对于基于 RedHat/CentOS 的发行版来说,通常会这样操作: ```bash yum -y install vixie-cron yum -y install crontabs ``` 这将安装必要的组件以支持 crontab 功能[^4]。 #### 编辑 Crontab 文件 一旦确认了 cron 服务处于活动状态,就可以开始编辑个人用户的 crontab 文件了。使用 `-e` 参数可以打开当前用户的 crontab 文件以便修改: ```bash crontab -e ``` 此时将会进入默认的文本编辑环境,在这里可以定义新的计划任务条目。每一条记录由六个字段组成,分别代表分钟、小时、日期、月份、星期几以及要执行的具体命令或脚本路径[^5]。 #### 查看现有任务列表 想要查看自己已有的所有定时任务,只需输入以下指令即可: ```bash crontab -l ``` 这条命令不会做任何更改,只会显示现有的配置项供查阅。 #### 删除全部任务设置 当不再需要某个账户下的所有自动作业时,可以选择将其彻底清除掉。注意此动作不可逆,请谨慎行事! ```bash crontab -r ``` 上述命令会移除与指定用户关联的所有 crontab 条目。 #### 设置其他用户的定时任务 (需管理员权限) 拥有适当权限的情况下,还可以帮助其它用户创建或调整他们的 crontab 记录。只需要加上 `-u <用户名>` 即可切换到目标账号下工作: ```bash crontab -u otheruser -e ``` 这里的 `otheruser` 应替换为目标用户的实际名称。 #### 实际应用案例 假设希望每天凌晨两点钟备份数据库,并把结果保存至 `/backup/db/` 目录内。那么可以在自己的 crontab 中加入这样的行: ```bash 0 2 * * * /usr/bin/mysqldump --all-databases | gzip > /backup/db/mysql_$(date +%F).sql.gz ``` 这段表达式的含义是从零分开始,在每日两小时内触发一次 mysqldump 备份整个 MySQL 数据库并将输出压缩存档于指定位置[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值