【发布时间】:2019-04-25 15:16:29
【问题描述】:
我正在尝试为 bash 中的程序创建一个初始化脚本。 (rhel6)
它首先检查进程。如果找到进程,它将回显该程序已经在线,如果没有,它将继续使用启动脚本以特定用户身份启动该程序。之后,它应该跟踪程序的日志文件并一起检查一串单词。如果找到的话,它应该杀死尾巴并回显该程序在线。
这是开始部分。
prog=someProg
user=someUser
threadCount=$(ps -ef | grep $prog |grep -v 'grep' |awk '{ print $2 }'| wc -l)
startb() {
if [ "$threadCount" -eq 2 ]; then
echo "$prog already online."
else
echo "Bringing $prog online."
su $user -c "/path/to/start/script.sh"
tail -f /path/to/$prog/log/file |
while IFS=$'\n' read line
do
if [[ $line == *started\ up\ and\ registered\ in* ]]; then
pkill tail
echo "$prog now online."
fi
done
fi
}
我的问题:
- 变量 $prog 没有在 $threadcount 中被选中 不管我怎么尝试。 (带单引号和双引号)
- 跟踪日志文件的逻辑是随机运行的。有时它 简直完美。它拖尾并等待直到找到字符串 在回显程序在线之前,有时它只是启动脚本 然后回显该程序在线,无需等待或等待。
这是不可预测的。我也在停止段中实现了相同的逻辑来监控日志然后回显,但即使它的工作方式与启动相同。只是随机的。
我确信这可能看起来很愚蠢和破碎。这是通过我的初学者 bash 技能到处挑选碎片制成的。
提前感谢您的建议和帮助。
【问题讨论】:
-
pkill tail会尝试杀死所有的尾巴。我知道这不是你的问题,只是一个观察。
标签: bash shell startup init rhel6