记录一则Linux任务调度异常
有一台测试服务器的任务调度设置本没问题,脚本也没问题,但始终都启动不起来。
我确定我写的是全路径格式,所以全路径不应该出现问题。脚本也无异常,表达式也是生成出来的也不该有错。
所以这个问题纠结了我很久。
首先确定我的运行脚本无异常。手动执行后可用。
查看一下Linux的版本。
uname -a

3. 查看一下Linux的发行版
cat /proc/version

4. 查看cron任务调度在linux中的配置
cat /etc/crontab

MAILTO=root:这个字段说明了当/etc/crontab文件中的例行性命令发生错误时,会将错误信息或屏幕显示的信息传递给谁?由于root无法在客户端收信,因此,可以将这个email改成自己普通用户帐号。
注意:基本上,/etc/crontab支持两种输入指令的方式,一种是直接以指令形式输入,一种则是以目录形式输入。
5. 确定我的脚本开头含有脚本环境变量#!/bin/bash
6. 确定任务调度中是全路径编写的
7. 不断尝试cron启动,本身应该一天执行一次的任务,让我改成了5秒执行一次。 然后看到了 cron日志中的错误.
tail -f /var/log/cron

实际有3个错误,但是此时我截图只截图到了2个错误。
分别是
WRONG FILE OWNER (/etc/cron.d/sysstat)
此错误代表Linux的cron任务调度中的sysstat文件并不归属于root用户
(root) COMD(? sh /home/mes/weback/weback.sh)
此错误代表cron表达式中的? 问号莫名其妙被归属到了命令行之中,本身是cron表达式的内容
我怀疑是这个发行版的问题 。切,绝对不是我表达式写错了。
所以后续操作的时候我都将cron表达式中的?给删除掉了。目前还在观察。
针对WRONG FILE OWNER (/etc/cron.d/sysstat)错误的解决办法如下所示。
查看/etc/cron.d/sysstat文件的归属权
ls /etc/cron.d/sysstat -lh
将/etc/cron.d/sysstat文件的所属组进行更改。
chown root:root /etc/crontab
重启crond任务调度
systemctl reload crond.service
查看crond任务调度状态
systemctl status crond.service
=====至此就解决了当前的问题,即先删掉了?问号,再配置了一下文件所属权。
其他有关crond命令如下所示。
systemctl start crond.service
systemctl stop crond.service
其次记录一下crontab相关的命令。
crontab 是 crond任务调度的模板命令,很多文章都提到了crontab -e命令是修改任务调度内容。如下所示。

crontab -r 删除任务调度
任务调度执行效果成不成功 注意查看/var/log/cron 文件。
另外要注意的是:crontab 会进行语法检查。如果不通过的语法不允许进行使用。如果没有指定crontab表达式的编辑器,则linux需要用户指定一下,此时只需要使用vim即可。
不管是crontab -e 还是 /etc/crontab 修改哪个文件都可修改任务调度,修改之后不需重启crond服务器,同样可以进行执行(一般linux发行版都没问题)。