linux部署java应用时,shell脚本必须用chmod +x赋予执行权限,否则报permission denied;需确认路径正确、无windows换行符、首行含shebang,并以绝对路径调用,同时遵循最小权限原则。

在 Linux 系统中部署 Java 应用时,若需通过自定义 Shell 脚本(如启动、停止、重启、健康检查等)实现自动化运维,脚本必须具备可执行权限,否则执行时会报错:Permission denied 或 command not found。使用 chmod +x 是赋予脚本执行权限最直接有效的方式。
确认脚本文件存在且路径正确
先确保 Shell 脚本已上传到目标服务器(如 /opt/app/bin/start.sh),并检查文件是否真实存在、无拼写错误、无 Windows 换行符(^M)。可用以下命令验证:
-
ls -l /opt/app/bin/start.sh—— 查看当前权限(通常初始为-rw-r--r--,不可执行) -
file /opt/app/bin/start.sh—— 确认是 POSIX shell 脚本,非二进制 -
head -n 2 /opt/app/bin/start.sh—— 检查首行是否含#!/bin/bash或#!/bin/sh
用 chmod +x 添加执行权限
执行以下命令即可赋予脚本用户(user)、组(group)及其他(others)的执行权限:
chmod +x /opt/app/bin/start.sh- 等价写法(更明确):
chmod u+x,g+x,o+x /opt/app/bin/start.sh - 若需批量授权多个脚本:
chmod +x /opt/app/bin/*.sh
执行后再次运行 ls -l,应看到权限变为 -rwxr-xr-x(或类似,关键是有 x 位)。
验证脚本能被正确调用
权限设置后仍需注意执行方式是否合规:
- 推荐用绝对路径执行:
/opt/app/bin/start.sh,避免因PWD或PATH导致找不到脚本 - 不要仅靠
./start.sh运行(除非当前目录就是脚本所在目录) - 若脚本内调用 Java 命令(如
java -jar app.jar),请确保java已加入PATH,或在脚本中使用绝对路径(如/usr/bin/java) - 可临时加调试语句:
echo "JAVA_HOME=$JAVA_HOME" && java -version,确认环境变量生效
结合 Java 部署场景的实用建议
在实际 Java 服务部署中,权限配置常与以下环节联动:
- 脚本中涉及文件操作(如写日志、创建 pid 文件)时,确保运行脚本的用户(如
appuser)对目标目录有读写权限:chown -R appuser:appuser /opt/app - 若脚本由 systemd 或 supervisor 管理,需在 service 文件中指定
User=appuser,且该用户对脚本和 Java 应用目录有足够权限 - CI/CD 自动部署时(如 Jenkins、GitLab CI),在构建后增加
ssh user@host "chmod +x /opt/app/bin/*.sh"步骤,避免人工遗漏 - 禁止给脚本设置
777权限(chmod 777 *.sh),最小权限原则更安全;+x已足够
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











