【问题标题】:Linux at command script keeps repeatingLinux at 命令脚本不断重复
【发布时间】:2014-12-03 00:54:07
【问题描述】:

我已从夜间循环服务更改为每周一次,但在更新 INI 后,我希望服务器立即循环服务。我想我可以使用“at”命令并将其与更新 INI 文件的命令一起发送。

问题是这样的,我使用的命令与我在 cronjob 中使用的命令相同,但不是像使用 cron 那样只循环一次,当我使用“at”时,服务会每隔几分钟循环一次.

使用“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 台服务器上手动循环服务。非常感谢您的帮助。谢谢。

更新

我注意到,当我在运行后执行“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 推到后台。不这样做会使它处于一种奇怪的状态,之后会调用 sleep 。奇怪的小东西给我带来了很多问题。

在此处发布此内容以帮助其他可能有同样挫败感的人。

【问题讨论】:

标签: linux shell cron


【解决方案1】:

结果证明我对“at”的实现没有任何问题。问题出在循环脚本上。

代码在最终更新中。

【讨论】:

    猜你喜欢
    • 2014-05-02
    • 1970-01-01
    • 2020-06-21
    • 2012-10-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多