CentOS crontab定时任务不执行的解决

本文详细介绍了CronTab配置文件的格式与使用方法,包括crond服务的启动与停止,如何通过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定时任务不执行问题

排查原因步骤如下:

首先,确认服务器是否开启定时任务计划服务,只有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语法错误

<code style="padding: 0px; margin: 0px; border: 0px; vertical-align: baseline; font-family: Consolas, Menlo, Monaco, 'Lucida Console', 'Liberation Mono', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Courier New', monospace, serif;"><span class="typ" style="padding: 0px; margin: 0px; color: rgb(102, 0, 102); border: 0px; vertical-align: baseline;"><span class="typ" style="padding: 0px; margin: 0px;">Syntax</span></span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0); border: 0px; vertical-align: baseline;"><span class="pln" style="padding: 0px; margin: 0px;"> error</span></span><span class="pun" style="padding: 0px; margin: 0px; color: rgb(102, 102, 0); border: 0px; vertical-align: baseline;"><span class="pun" style="padding: 0px; margin: 0px;">:</span></span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0); border: 0px; vertical-align: baseline;"><span class="pln" style="padding: 0px; margin: 0px;"> </span></span><span class="str" style="padding: 0px; margin: 0px; color: rgb(0, 136, 0); border: 0px; vertical-align: baseline;"><span class="str" style="padding: 0px; margin: 0px;">"("</span></span><span class="pln" style="padding: 0px; margin: 0px; color: rgb(0, 0, 0); border: 0px; vertical-align: baseline;"><span class="pln" style="padding: 0px; margin: 0px;"> unexpected  </span></span></code>

解决方法:

需指定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://blog.mimvp.com/2015/03/centos-crontab-task-does-not-regularly-perform-solution/

转载请保留固定链接:http://www.linuxeye.com/Linux/2248.html

CentOS 7 中配置 `crontab` 定时任务执行 `cat` 命令,可以通过编辑用户的 `crontab` 文件来实现。以下是一个详细的步骤说明: ### 1. 编辑 crontab 文件 使用 `crontab -e` 命令来编辑当前用户的 `crontab` 文件。如果这是第一次编辑,系统会提示选择一个编辑器。 ```bash crontab -e ``` ### 2. 添加定时任务 在编辑器中添加一行任务定义。`crontab` 的格式如下: ``` * * * * * command_to_execute - - - - - | | | | | | | | | +---- 星期几 (0 - 6) (星期天为0) | | | +------ 月份 (1 - 12) | | +-------- 日期 (1 - 31) | +---------- 小时 (0 - 23) +------------ 分钟 (0 - 59) ``` 假设你想每天凌晨 2:30 执行 `cat` 命令来查看某个文件的内容,例如 `/path/to/your/file.txt`,可以添加如下行: ```bash 30 2 * * * cat /path/to/your/file.txt >> /path/to/output.log 2>&1 ``` - `30 2 * * *` 表示每天凌晨 2:30。 - `cat /path/to/your/file.txt` 是要执行的命令。 - `>> /path/to/output.log 2>&1` 将命令的标准输出和错误输出追加到日志文件中,方便调试。 ### 3. 保存并退出 保存并退出编辑器。`crontab` 会自动加载新的配置。 ### 4. 验证任务 可以通过以下命令查看当前用户的 `crontab` 任务列表: ```bash crontab -l ``` 确保任务已经正确添加。 ### 5. 确保 cron 服务运行 检查 `cron` 服务是否正在运行: ```bash systemctl status crond ``` 如果服务未运行,可以启动它并设置开机自启: ```bash sudo systemctl start crond sudo systemctl enable crond ``` ### 示例 以下是一个完整的示例,展示如何每天凌晨 2:30 执行 `cat` 命令并记录输出: ```bash 30 2 * * * cat /home/user/example.txt >> /home/user/cron_output.log 2>&1 ``` ### 注意事项 - 确保路径正确且文件存在。 - 如果需要执行的命令较为复杂,建议将命令写入脚本文件,并在 `crontab` 中调用该脚本。 - `crontab` 的环境变量可能与用户交互式 shell 的环境变量同,因此建议在脚本中显式设置所需的环境变量或使用绝对路径。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值