每5分钟检查一次循环中的特定过程,持续30分钟

1 人不认可

你好,我有一个要求,在最初的服务器供应期间,我必须执行这个shell脚本。 我需要每5分钟检查一次代理(ps -ef|grep agent)。如果代理已经安装,我需要运行/home/usr/job.ksh并退出该脚本。 如果代理在30分钟内没有安装,我需要写上 "代理没有安装 "的信息并退出。

请在这个shell脚本的逻辑上给予帮助。

1 个评论
替换代码0- 你刚写完,并对你的脚本的整个逻辑进行了简化。
linux
bash
shell
scripting
ksh
skppth
skppth
发布于 2019-10-03
3 个回答
Pacifist
Pacifist
发布于 2019-10-03
已采纳
0 人赞同

你可以做这样的事情。

for _ in {1..6}                         # Run loop for 6 times (6*300=1800s ~ 30min)
    if [ $(ps -ef|grep agent|egrep -v grep|wc -l) -ge 1 ]
        /home/usr/job.ksh
        exit 0
        sleep 300                       # Sleep for 5min
echo "agent not installed"
exit 1
    
Šerg
Šerg
发布于 2019-10-03
0 人赞同

也许你看到的是'羊群'命令?

flock -w10 /var/tmp/job.lock /home/usr/job.ksh

-w10 - 如果没有启动,则在尝试启动前等待10秒(如果需要,则改为30分钟)。

并每隔5分钟在/etc/crontab中添加这个字符串。

*/5 * * * * root /bin/ksh /home/usr/job.ksh
    
谢谢你,Serg。事实上,上述要求是对每台服务器的配置一次性使用的。等待代理安装30分钟,如果没有安装,脚本应该以失败退出。我需要每隔5分钟检查一次代理是否安装完毕。 注意,Amith
UtLox
UtLox
发布于 2019-10-03
0 人赞同

你可以试试这个。

#!/bin/bash
for _ in {1..180}; do
    if pgrep agent &>/dev/null; then
        /home/usr/job.ksh
    sleep 10