You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Shell脚本每日自动执行Java程序(Jar包)且确保不中断?

每日自动运行Java JAR并保证程序持续运行的Shell脚本方案

Got it, let's break this down into actionable steps to get your Java JAR running automatically every day while ensuring it stays up without interruptions.

1. 编写核心Shell脚本

First, create a shell script that handles starting your JAR, logging output, and even checking if the process is already running (to avoid duplicate instances). Let's call it run_java_app.sh:

#!/bin/bash

# 配置你的路径和参数
JAR_PATH="/home/your-user/apps/your-app.jar"
LOG_FILE="/var/log/your-app.log"
JAVA_PATH="/usr/bin/java"  # 用`which java`可以找到java的绝对路径

# 检查程序是否已经在运行
if pgrep -f "$JAR_PATH" > /dev/null; then
    echo "$(date): 程序已经在运行,无需重复启动" >> "$LOG_FILE"
    exit 0
fi

# 启动程序,用nohup让它后台运行,即使终端关闭也不停止
echo "$(date): 开始启动程序..." >> "$LOG_FILE"
nohup "$JAVA_PATH" -jar "$JAR_PATH" >> "$LOG_FILE" 2>&1 &

# 记录启动成功信息
echo "$(date): 程序已成功启动,PID为 $!" >> "$LOG_FILE"

脚本说明:

  • pgrep -f "$JAR_PATH":检查是否有包含目标JAR路径的进程在运行,避免重复启动多个实例
  • nohup ... &:让程序脱离当前终端会话在后台运行,即使你关闭SSH连接也不会终止
  • >> "$LOG_FILE" 2>&1:把程序的标准输出和错误输出都写入日志文件,方便后续排查问题

2. 赋予脚本执行权限

运行以下命令让脚本具备可执行能力:

chmod +x /path/to/run_java_app.sh

3. 配置Crontab实现每日自动执行

接下来用cron工具实现每日定时启动脚本。先打开crontab编辑器:

crontab -e

在编辑器中添加一行配置,比如让脚本每天午夜自动运行(可根据需求调整时间):

0 0 * * * /path/to/run_java_app.sh

Cron格式说明:

分钟 小时 日 月 周,所以0 0 * * *表示每天0点0分执行脚本。如果想改成早上8点启动,只需改成0 8 * * *即可。

4. 额外措施:保证程序意外中断后自动重启

如果想让程序在崩溃后自动重启(不止是每日定时启动),可以修改脚本为持续监控模式:

#!/bin/bash

JAR_PATH="/home/your-user/apps/your-app.jar"
LOG_FILE="/var/log/your-app.log"
JAVA_PATH="/usr/bin/java"

while true; do
    # 检查进程是否存在
    if ! pgrep -f "$JAR_PATH" > /dev/null; then
        echo "$(date): 程序未运行,正在启动..." >> "$LOG_FILE"
        nohup "$JAVA_PATH" -jar "$JAR_PATH" >> "$LOG_FILE" 2>&1 &
        echo "$(date): 程序启动完成,PID为 $!" >> "$LOG_FILE"
    fi
    # 每5分钟检查一次进程状态
    sleep 300
done

之后可以通过@reboot cron配置让这个监控脚本在系统启动时自动运行,这样就能持续守护你的Java程序了。

关键注意事项

  • Java路径: 一定要在脚本里使用java的绝对路径,因为cron的环境变量PATH很精简,可能找不到java命令。用which java就能获取绝对路径。
  • 日志管理: 日志文件会越来越大,建议配置logrotate工具自动轮转、压缩旧日志。
  • 权限: 确保运行cron任务的用户对JAR文件、日志目录和脚本本身有读写权限。

内容的提问来源于stack exchange,提问作者Bhranee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:47:45