我已经从夜间自行车服务改为每周一次,但在我更新INI后,我希望服务器能够立即循环服务。我想我可以使用' at'命令并将其与更新INI文件的命令一起发送。
问题在于,我使用的是与我在cronjob中使用的相同的命令,而不是仅仅循环一次,就像使用cron一样,当我使用' at'服务每隔几分钟就会不停地骑行。
使用'
的脚本#!/bin/bash
export SRVINI=/u01/home/me/scripts/buildini
SERVERLIST=$SRVINI/serverlist.txt
## Generate the body to send out to each server
touch $SRVINI/body.ini
## copying server.ini commented out as Senthil wants a different copy that he will edit
#cp $SRV_DATA/server.ini $SRVINI/
$SRVINI/generate_body.pl
#rm $SRVINI/server.ini
## scp the body of the ini file to each server
for i in `cat $SERVERLIST` ; do
scp $SRVINI/body.ini $i:$SRVINI/
done
## Call outside perl script to manipulate the files
for i in `cat $SERVERLIST` ; do
ssh $i "source ~/.bash_profile ; cd $SRVINI ; $SRVINI/buildini.pl ; at now + 15 minutes <<< '/u01/home/server/scripts/cycleSRVC.sh > /u01/home/server/logs/cycleSRVC.log 2>&1'"
done
rm $SRVINI/body.ini
的cronjob
15 04 * * 6 /u01/home/me/scripts/cycleSRVC.sh >/u01/me/tomax/logs/cycleSRVC.log 2>&1
我使用了&#39; atq&#39;并验证每台服务器上只创建一个作业。这让我觉得我的脚本是通过ssh正确发送的。
我知道循环脚本有效,因为当它作为cronjob运行时没有问题。
我尝试了不同的方法来传递&#39; at&#39;命令,他们都在所有服务器上创建一个作业,它们都运行但几分钟后它们都重新开始循环,我必须手动终止循环,终止服务并重新启动它们。
如何继续前行。目前,当我对INI进行更新时,我在所有8台服务器上手动循环服务。非常感谢帮助。感谢。
更新
我注意到,当我这样做时,他们就会出现问题。运行后显示为
>atq
22 2014-12-02 22:01 = usr
这是否意味着它一直在运行和运行?这是否意味着循环脚本有错误,所以它从未完成at命令?如果是这样,为什么它作为一个cronjob工作?
最终更新:
发现问题。它出现在cycleSRVC.sh脚本中,而不是&#39; at&#39;。 当我的服务开始备份时,我打电话给:
# Restart services
/u01/app/progs/start.sh
sleep 30
我必须添加&#39;&amp;&#39;将start.sh推送到后台。没有这样做会把它置于一个奇怪的状态,之后就会调用睡眠。奇怪的小东西给我带来了很多问题。
在此发布此内容,以帮助其他可能遭受同样挫折的人。
答案 0 :(得分:0)
原来我的实施&#39; at&#39;没有任何问题。问题出在循环脚本上。
代码在最终更新中。