Linux命令脚本不断重复

时间:2014-12-03 00:54:07

标签: linux shell cron

我已经从夜间自行车服务改为每周一次,但在我更新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推送到后台。没有这样做会把它置于一个奇怪的状态,之后就会调用睡眠。奇怪的小东西给我带来了很多问题。

在此发布此内容,以帮助其他可能遭受同样挫折的人。

1 个答案:

答案 0 :(得分:0)

原来我的实施&#39; at&#39;没有任何问题。问题出在循环脚本上。

代码在最终更新中。