您的位置:首页 > 其它

同步时钟脚本在crontab中遇到的问题

2014-12-21 13:19 225 查看
时钟同步应该是集群维护中必需的事项之一了,可用下列脚本clock_sync.sh来实现:

#!/bin/bash
service ntpd stop
ntpdate 192.168.0.191
service ntpd start
chkconfig ntpd on
该脚本手动执行正常。然后将其加入crontab:

0 * * * * clock_sync.sh
假设上述操作都在root用户下完成。为了检查效果,查看/var/spool/mail/root文件,发现了如下关键字:

X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/root>
X-Cron-Env: <PATH=/usr/bin:/bin>

clock_sync.sh: line 2: service: command not found
clock_sync.sh: line 3: ntpdate: command not found
clock_sync.sh: line 4: service: command not found
clock_sync.sh: line 5: chkconfig: command not found
看来脚本确实执行了,但是为什么找不到service等四个命令呢?

使用which命令查看一下,发现service等四个命令的可执行程序都在/sbin或/usr/sbin目录下。原因清楚了:crontab执行时的命令搜索路径为<PATH=/usr/bin:/bin>,service等四个命令不在其搜索目录下,所以报错“command not found”。

解决方案为以下两者之一:

1. 修改/var/spool/cron/root为:

#!/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
0 * * * * clock_sync.sh
2. 在/etc/crontab文件的最后添加:0 * * * * clock_sync.sh

BTW:crontab相关知识

cron是服务名称,crond是后台进程,crontab则是定制好的计划任务表。

cron有两种配置文件:一个针对系统任务的全局配置文件(/etc/crontab);一组针对单个用户的配置文件(/var/spool/cron/username),这是采用crontab命令生成的。定时任务配置到任意一个中都可以。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: