Cómo implementar paquetes jar en el sistema en segundo plano de Ubuntu
1 # Use el nombre de dominio o IP Después del inicio, puede acceder al sitio web con este nombre de dominio o puerto IP: 80contextPath:spring:profiles:active: productionthymeleaf:cache: truejade4j:caching: truedataSource: driverClassName: com.mysql .jdbc.Driverurl: jdbc:mysql://127.0.0.1/spring_blogusername: rootpassword:hibernate:dialect: org.hibernate.dialect.MySQLDialecthbm2ddl.auto: updateshow_sql: falseredis:host: localhostport: 63794. Cómo ¿Ejecutar Spring en segundo plano en la aplicación Ubuntu Boot? Se recomienda utilizar el comando nohup. cd /root/spring-blog/currentnohup java -jar SpringBlog-0.1.jar --spring.config.location=application-production.yml \> ../logs/production.log 2> ../logs/production.err &En Ubuntu, también puede crear un nuevo script en el directorio /etc/init.d para ejecutar SpringBlog como un servicio, de modo que no tenga que escribir comandos tan engorrosos cada vez.
Cree un nuevo archivo /etc/init.d/spring_blog con el siguiente contenido: #!/bin/shSERVICE_NAME=spring_blogHOME=/root/spring-blogPATH_TO_JAR=$HOME/current/SpringBlog-0.1.jarPID_PATH_NAME=/tmp/spring_blog.pidLOG =$ HOME/logs/production.logERROR_LOG=$HOME/logs/production.errCONFIG=$HOME/application-production.ymlcase $1 instart)echo "Iniciando $SERVICE_NAME ..."if [ ! -f $PID_PATH_NAME ]; HOME/ currentnohup java -jar $PATH_TO_JAR --spring.config.location=application-production.yml > $LOG 2> $ERROR_LOG &echo $! > $PID_PATH_NAMEecho "$SERVICE_NAME comenzó ..."elseecho "$SERVICE_NAME ya se está ejecutando. .. "fi;;detener)if [ -f $PID_PATH_NAME ]; entoncesPID=$(cat $PID_PATH_NAME);echo "$SERVICE_NAME deteniendo ..." kill $PID;echo "$SERVICE_NAME detenido ..."rm $PID_PATH_NAMEelseecho "$ SERVICE_NAME no se está ejecutando ..."fi;;reiniciar)if [ -f $PID_PATH_NAME ]; entoncesPID=$(cat $PID_PATH_NAME);echo "$SERVICE_NAME deteniéndose ...";kill $PID;echo "$SERVICE_NAME detenido ..";rm $PID_PATH_NAMEecho "$SERVICE_NAME iniciando ..."cd $HOME/currentnohup java -jar $PATH_TO_JAR --spring.config.location=application-production.yml > $LOG 2> $ERROR_LOG &echo $! > $ PID_PATH_NAMEecho "$SERVICE_NAME iniciado..."elseecho "$SERVICE_NAME no se está ejecutando..."fi;;esac ahora puede usar el servicio para ejecutar el sitio web. sudo service spring_blog iniciasudo service spring_blog se detienesudo service spring_blog restart5. Implementar automáticamente el sitio web localmente en el servidor remoto. Localmente, utilicé un script de shell y un script de Python para cooperar con la implementación automatizada. implementar.sh usa el comando gradle para publicar el paquete jar y usa el comando scp para cargar el paquete jar en el servidor; implementar.py usa SSH para iniciar sesión de forma remota en el servidor y ejecutar comandos de implementación en el servidor.
# implementar.sh#!/bin/bashSERVER="your_server_ip"JAR="build/libs/SpringBlog-0.1.jar"echo "Construyendo $JAR..."./gradlew buildecho "Subir $JAR al servidor $SERVER.. ."scp $JAR root@$SERVER:/root/spring-blog/python implementar.pydeploy.py utiliza principalmente una biblioteca paramiko para el inicio de sesión remoto SSH en el servidor y ejecutar comandos. Este script realizará una copia de seguridad de /root/spring-blog/current/SpringBlog-0.1.jar en el servidor en /root/spring-blog/releases, y colocará el paquete jar recién lanzado en /root/spring-blog/current, y luego reinicie el servicio spring_blog.
#!/usr/bin/pythonimport paramikoimport threadingimport timeip = 'your_server_ip'user = 'root'password = ''jar = 'SpringBlog-0.1.jar'home='/root/spring-blog'current=home+"/current" lanzamientos=home+"/releases"def ejecutar_cmds(ip, usuario, contraseña, cmd):try:ssh = paramiko.SSHClient()ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())ssh.connect(ip,22,usuario,contraseña, timeout=5)for m in cmd:print mstdin, stdout, stderr = ssh.exec_command(m)# stdin.write("Y")out = stdout.readlines()for o in out:print o,print '%s \tOK\n'%(ip)ssh.close()except :print '%s\tError\n'%(ip)if __name__=='__main__':print 'Comenzar a implementar %s en el servidor %s'%( jar, ip)now = time.strftime("%Y%m%d%H%M%S")cmd = ['echo Detener el servicio spring_blog... && servicio spring_blog detener','echo Vaciar todos los datos de la caché de Redis. .. && redis-cli -r 1 flusall','echo Detener el servidor redis... && service redis_6379 stop','echo Usar nuevo jar... ' + \' && mv ' + current + '/' + jar + ' ' + lanzamientos + '/' + ahora + '_' + jar ,'mv ' + home + '/' + jar + ' ' + current + '/' + jar,'echo Detener redis... && servicio redis_6379 start','echo Iniciar el servicio spring_blog... && servicio spring_blog start ' + \' && echo Todo listo.']a=threading.Thread(target=execute_cmds, args=(ip,usuario,contraseña,cmd))a. Después de configurar start(), puede ejecutar ./deploy.sh después de escribir el código localmente para implementarlo en el servidor remoto con un solo clic.