在CentOS7环境下,编辑/etc/crontab配置了一个定时任务,定时任务的作用就是定时针对某个磁盘使用fio进行读写测试。
在/etc/crontab中的配置如下:
cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
00 * * * * root /usr/bin/bash /root/fiotesting.sh
fiotesting.sh的内容如下:
cat fiotesting.sh
#!/usr/bin/bash
fio -filename=/dev/sdk -runtime=45 -time_based -direct=1 -iodepth 64 -thread -rw=randrw -ioengine=libaio -bs=8k -numjobs=1 -group_reporting -name=mytest --output=/tmp/8k-randrw-test.log 2>&1 /dev/null
配置完毕之后,手动执行 bash /root/fiotesting.sh是正常的,检测到的结果也符合预期。
但是感觉定时任务并没有生效。
检测crond服务状态也是正常的
从/var/log/cron日志文件中查看,相关的定时任务已经被执行
Nov 4 15:48:01 quantum162 CROND[63570]: (root) CMD (/usr/bin/bash /opt/fiotesting.sh)
Nov 4 15:49:01 quantum162 CROND[63691]: (root) CMD (/usr/bin/bash /opt/fiotesting.sh)
Nov 4 15:50:01 quantum162 CROND[63787]: (root) CMD (/usr/bin/bash /opt/fiotesting.sh)
排查过程:
- 手动执行再次确认脚本可以正常执行
- 在脚本中增加 data >> /tmp/test 发现会有/tmp/test文件生成,并且每分钟都会有时间戳打印,证明这个脚本确实是被调用了,问题应该出在脚本文件的内容上
- 开始以为是重定向出现的问题,将–output=/tmp/8k-randrw-test.log 和 2>&1 /dev/null 逐渐删除,还是没有生效,这样就排除了重定向的原因
- 最后怀疑可能是系统找不到fio命令。因为当手动执行的时候,是把/urs/local/bin添加到了PATH里面,但是系统调用的时候不一定知道fio的位置,这里将脚本重新修改了一下,指定了fio的全路径信息 /usr/local/bin/fio
修改后的 fiotesting.sh的内容如下:
cat fiotesting.sh
#!/usr/bin/bash
/usr/local/bin/fio -filename=/dev/sdk -runtime=45 -time_based -direct=1 -iodepth 64 -thread -rw=randrw -ioengine=libaio -bs=8k -numjobs=1 -group_reporting -name=mytest --output=/tmp/8k-randrw-test.log 2>&1 /dev/null
这个时候定时任务就能够按照预期执行了。
这个主要是记录一下针对定时任务不生效的排查过程,供有需要的同学参考一下。