我有一个 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
问题是 的值值 变量以 的形式出现4 (grep 匹配模式计数)如果进程启动并且它以 的形式出现3 如果进程关闭。 当脚本由 cron 自动执行时会发生这种情况值 评估如下
val=$(ps -efa | grep -v grep | grep import -c)
如果脚本是手动执行的, 的值值 是 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
关于bash - 计划执行返回错误值的 shell 脚本(使用 cron 计划执行脚本)(Ubuntu 20.04.4 LTS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72743399/