bash - 计划执行返回错误值的 shell 脚本(使用 cron 计划执行脚本)(Ubuntu 20.04.4 LTS)

标签 bash shell ubuntu cron

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

相关文章:

bash - 如何强制 wget 跳过指向父元素的链接?

linux - 如何使用 Bash 将整数写入二进制文件?

linux - 用于远程连接到其他系统并在其中执行一堆命令的shell脚本

shell - echo PATH $PATH\$PATH 有什么作用?

bash - Docker RUN语句(修改文件)未执行

regex - 我写了一些下面提到的代码,但是如何在合并两个文件后从第二个文件开始删除列标题行

scala - Spark shell 命令行

python - 无法在 ubuntu 中显示 IPython 对象,但在 colab 输出中显示

docker - 无法从非本地服务器使用端口 3000 访问 Grafana(Docker 镜像)

bash - 尝试在 makefile 中加载模块环境时出错