2014-12-03 62 views
1

我已经从夜间骑车服务改为每周一次,但在更新INI之后,我希望服务器能够正确地循环服务。我想我可以使用'at'命令并将它与更新INI文件的命令一起发送。Linux在命令脚本不断重复

问题是这样的,我使用的是我在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 

脚本我用 'ATQ' 和核实,只有一个工作是在每个服务器上创建的。这让我觉得我的脚本通过ssh正确发送。

我知道循环脚本的工作原理,因为它作为cronjob运行时没有问题。

我尝试了不同的方式传递'at'命令,他们都在所有的服务器上创建一个作业,它们都运行,但他们都在几分钟后重新开始循环,我必须手动杀死骑自行车,杀死服务并把他们带回来。

在如何进行损失。目前,当我对INI进行更新时,我会在所有8台服务器上手动循环服务。非常感谢帮助。谢谢。

UPDATE

我注意到,当我做“ATQ”它运行后,它显示为

>atq 
22  2014-12-02 22:01 = usr 

这是否意味着它只是不断跑跑步?这是否意味着循环脚本有错误,因此它从未完成at命令?如果是这样,为什么它作为一个cronjob?

最后更新:

发现这个问题。它在cycleSRVC.sh脚本中,而不是'at'。 当我的服务正在启动备份我打电话:

# Restart services 
/u01/app/progs/start.sh 
sleep 30 

我有一个“&”推start.sh添加到背景。不这样做会让它处于一种奇怪的状态,之后会有睡眠。奇怪的小事让我产生了很多问题。

在此发布此信息可以帮助任何可能有同样挫败感的人。

+0

请将您的解决方案作为答案发布,以便将此问题从“未答复”列表中解决。另见:http://stackoverflow.com/help/self-answer – 2014-12-03 11:29:00

+0

@Ruud谢谢!会做 – bigw8 2014-12-04 22:47:04

回答

0

原来我的'at'实现没有错。问题在于循环脚本。

代码处于最终更新。