我在gitlab的pre-receive中写了一段python代码,用来集成check-style。
如果是:com =r'java -jar /home/appadmin/checkstyle/lib/checkstyle-8.36.1-all.jar -c /home/appadmin/checkstyle/style/CheckStyle.xml ' + file+'/'
result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
则会报:'/bin/sh: java command not found',但是用java -version是没问题的,也就是环境变量配置均没问题。
如果指定java的绝对路径:
cmd = r'/home/appadmin/jdk1.8.0_11/bin/java -jar /home/appadmin/checkstyle/lib/checkstyle-8.36.1-all.jar -c /home/appadmin/checkstyle/style/CheckStyle.xml ' + file+'/'
result = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
则会报:'/bin/sh: /home/appadmin/jdk1.8.0_11/bin/java:Permission denied\n'
其实就是参考了文章https://www.cnblogs.com/wangshunyao/articles/10797481.html 的代码
来个sudo 看看
执行这个命令的时候,应该会在linux当前用户家目录下的 ~/.bashrc
来找 JAVA_HOME
,所以需要在此文件中声明即可
export JAVA_HOME="/usr/java/jdk1.8.0_251"
export CLASSPATH=$JAVA_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
报错/bin/sh: /home/appadmin/jdk1.8.0_11/bin/java:Permission denied
肯定是运行程序用户没有执行java的权限,建议检查运行程序的用户运行命令java -version
给用户赋予java的权限
还有注意python程序启动不要使用nohup后台运行,否者可能还会有很多错误。