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

Posted

技术标签:

【中文标题】每 5 分钟检查一次循环中的特定进程,持续 30 分钟【英文标题】:Check particular process in loop for every 5 min for 30 min 【发布时间】:2020-02-01 10:27:50 【问题描述】:

您好,我有一个要求,在初始服务器配置期间,我必须执行这个 shell 脚本。 我需要每 5 分钟检查一次代理(ps -ef|grep 代理)。如果安装了代理,我需要运行 /home/usr/job.ksh 并退出脚本。 如果代理未安装 30 分钟,我需要输入消息“代理未安装”并退出。

请帮忙解释一下这个 shell 脚本的逻辑。

【问题讨论】:

help in logic - 您刚刚编写并解释了脚本的整个逻辑。 【参考方案1】:

你可以这样做:

for _ in 1..6                         # Run loop for 6 times (6*300=1800s ~ 30min)
do
    if [ $(ps -ef|grep agent|egrep -v grep|wc -l) -ge 1 ]
    then
        /home/usr/job.ksh
        exit 0
    else
        sleep 300                       # Sleep for 5min
    fi
done
echo "agent not installed"
exit 1

【讨论】:

【参考方案2】:

你可以试试这个:

#!/bin/bash
for _ in 1..180; do
    if pgrep agent &>/dev/null; then
        /home/usr/job.ksh
        exit
    fi
    sleep 10
done
echo "agent not intalled"

运行循环 180 次并检查代理是否正在运行。检查之间睡眠 10 秒。

【讨论】:

【参考方案3】:

你可能看到'flock'命令吗?

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

-w10 - 如果未启动,请等待 10 秒后再尝试启动(如果需要,请更改 30 分钟)

每 5 分钟将此字符串添加到 /etc/crontab:

*/5 * * * * root /bin/ksh /home/usr/job.ksh

【讨论】:

谢谢军士。实际上,上述要求对于每台配置的服务器都是一次性的。等待代理安装 30 分钟,如果未安装脚本应该退出失败。如果代理每 5 分钟安装一次,我需要检查一下。问候,阿米特

以上是关于每 5 分钟检查一次循环中的特定进程,持续 30 分钟的主要内容,如果未能解决你的问题,请参考以下文章

每 5 分钟运行一次 Cron 作业,持续 10 秒

仅在特定时间每分钟运行一次 cron 作业?

每分钟运行一次 cronjob 的风险

每分钟运行一次cronjob的风险

Pyhton psycopg2的计划查询

如何在服务器上的特定小时内每分钟运行一次cron作业