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

Debian 11 VPS启动Shell脚本无法访问Jar文件问题求助

解决Debian 11下Jar文件开机启动失败问题

一、先修复脚本的换行符错误

你执行脚本时出现的: not found/runjar.sh: 2:类错误,是因为脚本使用了Windows格式的CRLF换行符,Linux系统无法正确解析。解决方法:

  • 安装dos2unix工具转换格式:
apt update && apt install -y dos2unix
dos2unix /etc/init.d/runjar.sh
  • 若无法安装工具,用sed命令手动去除换行符中的\r字符:
sed -i 's/\r$//' /etc/init.d/runjar.sh

二、排查Jar文件无法访问的问题

1. 确认文件真实存在

执行命令验证路径是否正确:

ls -l /root/bot.jar

若输出为空,说明文件不存在,请核对Jar文件的实际存放路径。

2. 使用Java的绝对路径

开机启动脚本的环境变量PATH可能不包含Java路径,需用绝对路径调用Java。先查找Java安装路径:

which java

假设输出为/usr/bin/java,修改runjar.sh脚本,将java替换为绝对路径:

#!/bin/sh

echo "Running Jar"
/usr/bin/java -jar /root/bot.jar

exit 0

3. 让Jar后台运行(关键)

直接执行java -jar会阻塞脚本,导致开机启动流程无法完成,需让Jar在后台运行并记录日志:
修改脚本为:

#!/bin/sh

echo "Starting Jar Bot in background"
nohup /usr/bin/java -jar /root/bot.jar > /var/log/bot.log 2>&1 &
exit 0
  • nohup:让进程脱离终端在后台运行
  • > /var/log/bot.log 2>&1:将标准输出和错误输出写入日志文件,方便后续排查问题

三、推荐使用Systemd管理服务(Debian 11官方标准)

Debian 11默认用Systemd替代传统init.d,稳定性和可管理性更强,步骤如下:

  1. 创建Systemd服务文件:
nano /etc/systemd/system/bot.service

写入以下内容:

[Unit]
Description=Jar Bot Service
After=network.target  # 确保网络启动后再运行服务

[Service]
Type=simple
User=root
ExecStart=/usr/bin/java -jar /root/bot.jar  # 替换为你的Java绝对路径和Jar路径
Restart=always  # 进程意外退出时自动重启
RestartSec=5  # 重启间隔5秒
StandardOutput=append:/var/log/bot.log
StandardError=append:/var/log/bot.log

[Install]
WantedBy=multi-user.target  # 多用户模式下开机启动
  1. 重新加载Systemd配置:
systemctl daemon-reload
  1. 设置开机自启并启动服务:
systemctl enable bot.service
systemctl start bot.service
  1. 检查服务状态:
systemctl status bot.service

额外说明

  • 给/root/bot.jar设置chmod +x是多余操作,Java仅需读取权限即可运行Jar文件,无需执行权限。
  • 若使用Systemd管理服务,无需再维护init.d脚本,两种方式二选一即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 08:05:38