Ubuntu 18.04(预发布版)Artifactory未生成ARTIFACTORY_PID文件咨询
解决Ubuntu 18.04下Artifactory Manager脚本无法生成PID文件的问题
我之前在处理systemd管理的服务时碰到过类似的PID文件生成问题,结合你的情况——手动sudo执行脚本正常但systemd运行时失败,大概率是systemd的环境特性、shell差异或者权限配置导致的,给你几个具体的排查和解决方向:
1. 检查并完善systemd服务配置
systemd本身会追踪服务PID,默认可能会和脚本自身的PID生成逻辑冲突,或者服务配置缺失关键参数:
- 找到Artifactory的systemd服务文件(通常在
/etc/systemd/system/artifactory.service或/lib/systemd/system/artifactory.service),查看是否有PIDFile配置项。如果没有,添加一行指定PID文件的路径(比如你的脚本预期生成的ARTIFACTORY_PID路径):
注意替换成你实际的PID文件路径,然后重载systemd配置并重启服务:PIDFile=/var/run/artifactory/artifactory.pidsudo systemctl daemon-reload sudo systemctl restart artifactory.service - 同时检查服务文件中的
User和Group配置,确保运行服务的用户拥有写入PID文件所在目录的权限。比如如果PID文件放在/var/run/artifactory/,要确保这个目录存在且归该用户所有:sudo mkdir -p /var/run/artifactory sudo chown artifactory:artifactory /var/run/artifactory
2. 解决dash与bash的shell差异问题
Ubuntu 18.04默认shell从bash换成了dash,而你的artifactoryManager.sh可能包含bash专属的语法,导致在dash环境下执行异常:
- 修改脚本开头的shebang行,从
#!/bin/sh改为#!/bin/bash,强制脚本用bash执行。 - 或者在systemd服务文件中直接指定用bash运行脚本,修改
ExecStart项:
修改后同样需要重载systemd配置并重启服务。ExecStart=/bin/bash /opt/artifactory/bin/artifactoryManager.sh start
3. 对齐systemd与手动执行的环境变量
手动sudo执行时的环境变量和systemd服务的默认环境变量有差异,脚本可能依赖某些环境变量才能正确生成PID文件:
- 在systemd服务文件中添加
Environment配置,补充脚本需要的变量,比如:
你可以先手动执行Environment="HOME=/opt/artifactory" Environment="ARTIFACTORY_HOME=/opt/artifactory"env命令查看sudo下的环境变量,对比systemd的环境(用sudo systemctl show artifactory.service --property=Environment查看),补充缺失的关键变量。 - 也可以在
artifactoryManager.sh脚本中显式指定PID文件的绝对路径,避免依赖环境变量的相对路径或默认路径。
4. 调试服务执行过程定位问题
如果以上方法都没解决,通过日志和调试模式找出具体失败环节:
- 实时查看服务启动日志,捕捉报错信息:
日志里可能会出现权限不足、文件路径不存在等明确提示。sudo journalctl -u artifactory.service -f - 临时开启脚本的调试模式,修改systemd服务的
ExecStart为:
重启服务后,查看日志会输出脚本每一步的执行细节,能精准定位到PID文件生成失败的具体命令或逻辑。ExecStart=/bin/bash -x /opt/artifactory/bin/artifactoryManager.sh start
内容的提问来源于stack exchange,提问作者cgseller
相关产品推荐
相关产品推荐

