【发布时间】:2021-01-15 06:12:51
【问题描述】:
感谢您抽出宝贵时间阅读此问题。
我在将脚本运行到 Rundeck 时遇到问题。有以下例子:
#!/bin/bash
SERVICE=$(whereis -b service | awk '{ print $2 }')
MDBC="/etc/mongod.conf"
CHECK=$(ps axu | grep mongod | grep -v grep | wc -l)
if [ $CHECK -eq 0 ]; then
echo "Restarting MongoDB"
$(which mongod) -f $MDBC
if [ $? -ne 0 ]; then
echo "Restart failed. Trigger this job manually."
else
echo "Service restarted."; fi
else
echo "Service is up and running!"; fi
在服务器本地运行,给出预期的输出:
sudo bash -x test.sh
++ whereis -b service
++ awk '{ print $2 }'
+ SERVICE=/sbin/service
+ MDBC=/etc/mongod.conf
++ grep -v grep
++ wc -l
++ grep mongod
++ ps axu
+ CHECK=0
+ '[' 0 -eq 0 ']'
+ echo 'Restarting MongoDB'
Restarting MongoDB
++ which mongod
+ /usr/bin/mongod -f /etc/mongod.conf
about to fork child process, waiting until server is ready for connections.
forked process: 84141
child process started successfully, parent exiting
+ '[' 0 -ne 0 ']'
+ echo 'Service restarted.'
Service restarted.
在 Rundeck 中运行与 script 选项相同的代码,会产生以下结果:
++ awk '{ print $2 }'
++ whereis -b service
+ SERVICE=/sbin/service
+ MDBC=/etc/mongod.conf
++ grep -v grep
++ ps axu
++ wc -l
++ grep mongod
+ CHECK=3
+ '[' 3 -eq 0 ']'
+ echo 'Service is up and running!'
Service is up and running!
如您所见,在第一个输出中,变量 CHECK 的结果等于 0,因为没有 MongoDB 进程正在运行。
第二个输出将CHECK 的值作为3,因此if 条件立即退出。
我的 Rundeck 版本是开源版本 3.3.5
有什么建议吗?
【问题讨论】:
-
在您的脚本步骤中,您定义了“调用字符串”(如
/bin/bash)和“文件扩展名”(如.sh)? (都可以点击“高级”按钮)。 -
嗨@MegaDrive68k 感谢您的帮助!是的,我已经输入了这些值,结果完全一样。