shell脚本的调度执行返回错误的值(脚本执行与cron调度)(Ubuntu 20.04.4 LTS)



我有一个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