1、Maven打包項目java
添加依賴,打包插件linux
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.ysxu</groupId> <artifactId>Hello</artifactId> <version>1.0-SNAPSHOT</version> <dependencies> <!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.26</version> </dependency> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-classic --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> </dependency> <!-- https://mvnrepository.com/artifact/ch.qos.logback/logback-core --> <dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-core</artifactId> <version>1.2.3</version> </dependency> </dependencies> <build> <plugins> <plugin> <artifactId>maven-assembly-plugin</artifactId> <configuration> <appendAssemblyId>false</appendAssemblyId> <descriptorRefs> <descriptorRef>jar-with-dependencies</descriptorRef> </descriptorRefs> <archive> <manifest> <!--注意,此處必須是main()方法對應類的完整路徑 --> <mainClass>Main</mainClass> </manifest> </archive> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>assembly</goal> </goals> </execution> </executions> </plugin> </plugins> </build> </project>
編寫Main.javashell
import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class Main { private static final Logger logger = LoggerFactory.getLogger(Main.class); public static void main(String[] args) throws InterruptedException { while (true){ logger.info("Hello, Linux"); Thread.sleep(3000); } } }
編寫logback.xml配置文件apache
<?xml version="1.0" encoding="UTF-8"?> <configuration> <appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender"> <encoder> <pattern>%red(%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n)</pattern> </encoder> </appender> <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender"> <encoder> <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern> <charset>utf-8</charset> </encoder> <!-- <file>log/output.log</file>--> <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"> <fileNamePattern>log/%d{yyyy-MM-dd}.log</fileNamePattern> </rollingPolicy> <!-- <triggeringPolicy class="ch.qos.logback.core.rolling.SizeBasedTriggeringPolicy">--> <!-- <MaxFileSize>1MB</MaxFileSize>--> <!-- </triggeringPolicy>--> </appender> <root level="INFO"> <appender-ref ref="CONSOLE" /> <appender-ref ref="FILE" /> </root> </configuration>
打開Maven窗口,依次執行clean--->compile--->packageapi
生成的jar文件在target目錄下bash
2、將jar文件做爲Linux的服務運行app
複製jar文件到Linuxmaven
在與jar文件同一目錄下編寫start.sh,stop.shui
start.shspa
#!/bin/bash export JAVA_HOME=/usr/local/java/jdk1.8.0_221 export JRE=/usr/local/java/jdk1.8.0_221/jre export CLASSPATH=$JAVA_HOME/lib:$JRE/lib:. export PATH=$PATH:$JAVA_HOME/bin/:$JRE/bin export PATH=$JAVA_HOME/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin nohup java -jar /root/project/Hello-1.0-SNAPSHOT.jar >>/dev/null 2>&1 & echo $! > /var/run/Hello-1.0-SNAPSHOT.pid
stop.sh
#!/bin/bash PID=$(cat /var/run/Hello-1.0-SNAPSHOT.pid) kill -9 $PID
添加hello.service (/usr/lib/systemd/system/hello.service)
[Unit] Description=hello server Documentation= Before= After= Wants= #Request= [Service] Type=forking WorkingDirectory=/root/project PermissionsStartOnly=true ExecStart=/root/project/start.sh KillMode=process ExecStop=/root/project/stop.sh PrivateTmp=true Restart=always RestartSec=2s LimitCORE=infinity [Install] WantedBy=multi-user.target
使用命令管理服務
systemctl start xxx systemctl stop xxx systemctl restart xxx systemctl enable xxx
3、遇到問題
Failed at step EXEC spawning /usr/local/yealink/ptms/ptms-start.sh: Permission denied
緣由是沒有執行sh文件的權限,這裏經過chmod 777 ptms-start.sh給相應的文件賦予最高權限便可。
Failed at step EXEC spawning /usr/local/yealink/ptms/ptms.sh: No such file or directory
遇到sh文件找不到,可是確實路徑又沒錯的狀況,能夠試着直接./ptms-start.sh執行sh文件,看看會不會報錯:bad interpreter: No such file or directory,若是會基本就是這個sh文件格式的問題。
緣由在於在window下編輯shell文件,換行符是不同的,會產生不可見字符。我確實有把sh文件在window系統打開編輯過,此時在傳到Linux系統上格式就會發生變化,在Linux上原本應該是unix的,但發現倒是dos格式的。解決辦法就是在linux上修改shell文件格式爲unix便可。
4、參考