Rocky Linux下systemd启动Java应用无法识别额外目录问题
问题解决思路
1. 修复systemd的环境变量PATH
systemd默认的环境变量PATH范围比用户shell窄,很可能导致Java应用找不到ffmpeg可执行文件。在systemd服务配置的[Service]段添加完整的PATH环境变量:
[Service] # 保留原有配置,新增以下行 Environment=PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
如果ffmpeg安装在非标准路径(比如/opt/ffmpeg/bin),需将该路径也加入:
Environment=PATH=/opt/ffmpeg/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
修改后重新加载配置并重启服务:
sudo systemctl daemon-reload sudo systemctl restart <你的服务名称>
2. 验证media目录的状态与权限
在run.sh中添加media目录的检查逻辑,确认systemd启动时该目录存在且权限正常:
# 在cd /home/ops/DMR之后插入 echo "检查media目录状态:" ls -l media || echo "media目录不存在!"
通过journalctl查看服务日志,确认输出结果:
journalctl -u <你的服务名称> -f
如果media目录不存在,需检查上传流程是否正确创建了该目录;如果权限异常,执行以下命令修复:
sudo chown -R ops:ops /home/ops/DMR/media sudo chmod -R 755 /home/ops/DMR/media
3. 确认Java应用的工作目录
在Java应用中添加日志,输出当前工作目录,验证是否与预期一致:
System.out.println("当前工作目录:" + System.getProperty("user.dir"));
正常情况下日志应显示/home/ops/DMR,如果不符,说明systemd的WorkingDirectory配置未生效,或应用内部有修改工作目录的逻辑。
4. 直接指定ffmpeg的绝对路径
如果应用支持配置ffmpeg路径,直接在Java应用的配置文件中设置ffmpeg的绝对路径(比如/usr/bin/ffmpeg),彻底避免依赖环境变量的问题。
内容的提问来源于stack exchange,提问作者VicVerevita
相关产品推荐
相关产品推荐

