我有一个shell脚本,计划每分钟使用crontab条目运行一次。该脚本检查Java进程是否启动。如果进程未启动,它将尝试启动Java进程
下面是shell脚本#!/bin/bash
val=0
val=$(ps -efa | grep -v grep | grep import -c)
echo ${val} >> /software/deployment/service/import2/import-integrator.log
if [[ ${val} -eq 4 ]]; then echo "Import Up" >> /tmp/output.log
else
echo "Import Down" >> /tmp/output.log
cd /software/deployment/service/import2/
nohup /usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar -Xms4096m -Xmx16384m /software/deployment/service/import2/import-web-1.0-SNAPSHOT.war >> /software/deployment/service/import2/import-integrator.log &
echo "Import Started" >> /tmp/output.log
fi
以上脚本是使用以下命令调度的(使用root)用户帐户)
crontab -e
下面是条目
*/1 * * * * /bin/bash /software/deployment/service/import2/restart_import.sh
问题是val的值4(按grep匹配模式的计数)如果进程已启动并且即将到来,则3如果进程关闭。当脚本由cron自动执行时发生。val
val=$(ps -efa | grep -v grep | grep import -c)
如果脚本是手动执行的,val的值1是当进程启动并且0
我想了解为什么会发生这种情况(手动执行相同的命令并通过cron返回两个不同的值)
使用cron遵循脚本的逻辑:
1分钟
假设${val}
== 0
运行脚本:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar -Xms4096m -Xmx16384m /software/deployment/service/import2/import-web-1.0-SNAPSHOT.war >> /software/deployment/service/import2/import-integrator.log &
2分钟
假设${val}
== 1
运行脚本:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar -Xms4096m -Xmx16384m /software/deployment/service/import2/import-web-1.0-SNAPSHOT.war >> /software/deployment/service/import2/import-integrator.log &
3分钟
假设${val}
== 2
运行脚本:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar -Xms4096m -Xmx16384m /software/deployment/service/import2/import-web-1.0-SNAPSHOT.war >> /software/deployment/service/import2/import-integrator.log &
4分钟
假设${val}
== 3
运行脚本:
/usr/lib/jvm/java-11-openjdk-amd64/bin/java -jar -Xms4096m -Xmx16384m /software/deployment/service/import2/import-web-1.0-SNAPSHOT.war >> /software/deployment/service/import2/import-integrator.log &
5分钟
假设${val}
== 4
运行脚本:
echo "Import Up" >> /tmp/output.log
6分钟
假设${val}
== 4
运行脚本:
echo "Import Up" >> /tmp/output.log