我需要使用位于Ubuntu 18.04机器上的控制台启动Java Rest服务器。我公司使用的大厅版本为5.5.11。服务器代码是用Java编写的,因此java -jar <uber.jar>
从命令行即可轻松实现(请参见下文)。在生产中,我不会有这种简单的奢侈,因此是我的问题。
我有一个scp命令可以将.jar从concourse复制到目标Ubuntu计算机:
scp -i /tmp/key.p8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ./${NEW_DIR}/${ARTIFACT_NAME}.${ARTIFACT_FILE_TYPE} ${SRV_ACCOUNT_USER}@${JAVA_VM_HOST}:/var/www
请注意,我的私钥是通过-i传递的,我可以确认它是否正常工作。
我遵循了似乎很有希望的其他SO Q&A:通过ssh在目标计算机上在后台执行命令,但是尝试对建议的解决方案和其他答案进行了一些排列之后,我仍然没有启动剩余服务。
我已经在我的主题脚本中尝试过此行的一些排列:
ssh -f -i /tmp/pvt_key1.p8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${SRV_ACCOUNT_USER}@${JAVA_VM_HOST} "bash -c 'nohup java -jar /var/www/${ARTIFACT_NAME}.${ARTIFACT_FILE_TYPE} -c \"/opt/testcerts/clientkeystore\" -w \"password\" > /dev/null 2>&1 &'"
我已经尝试过在ssh中使用-f和-t开关,以及不使用-f和-t开关,使用和不使用文件流重定向,使用和不使用nohup以及Linux背景('&')命令以及各种转义引号的方法。
在bash提示符下,此行成功启动了我的服务器。需要使用两个开关来指向证书并提供密码:
java -jar rest-service.jar -c "/opt/certificates/clientkeystore" -w "password"
我确实认为在Concourse中可以做到这一点,但是我仍然停留在这一点上。
经过大量尝试后出现错误,看来我需要这样做:
ssh -f -i /tmp/pvt_key1.p8 -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null ${SRV_ACCOUNT_USER}@${JAVA_VM_HOST} "bash -c 'sudo java -jar /var/www/${ARTIFACT_NAME}.${ARTIFACT_FILE_TYPE} -c \"/path/to/my/certificate\" -w \"password\" > /var/www/log.txt 2>&1 &'"
关键是我缺少命令的“ sudo”部分。使用nohup而不是放入Linux bash背景指示符('&')似乎给我一个错误。这对我有用,但也欢迎其他人发布答案,提供更好的答案或更好的做法。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句