1. 程式人生 > >java伺服器開發和維護(linux平臺常用指令)

java伺服器開發和維護(linux平臺常用指令)

作為一個java伺服器開發人員,我們必須瞭解最基本的linux操作指令,包括jdk的安裝及環境變數配置、java伺服器程式的釋出和部署,防火牆的開啟和開啟等等,下面我們對以上提到的相關指令進行介紹。

說明:1)以下均是基於ubuntu 16.04.3-64bit進行的介紹;2)安裝JDK為1.8版本

內容:

  • JDK的安裝和環境變數配置
  • Java伺服器程式的部署和釋出
  • 防火牆的開啟和開啟
  • 埠號的啟用

一、JDK的下載安裝和環境變數的配置

1、JDK的下載和安裝(Oracle版本解壓安裝)

1)在官網上下載最新的jdk,為了加快下載速度,朋友們可以在用迅雷進行下載。

官網網址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

下載檔案格式為.tar.gz結尾,比如jdk-8u144-linux-x64.tar.gz

2)建立自己想把jdk安裝的目錄

這裡,我們把目錄建立在/usr下

指令:mkdir /usr/lib/jdk 


3)用工具將我們下載的JDK移動到剛才建立的目錄下/usr/lib/jdk (我用的工具:SecureCRSecureFXPortable64);


4)對下載的壓縮檔案進行解壓

指令:tar -zxvf jdk-8u144-linux-x64.tar.gz


到這裡,我們就是“安裝”好JDK了。

2、配置JDK的環境變數

配置JDK環境變數有兩種方式

方式一:修改全域性配置檔案profile,作用於所有使用者

1)編輯指令:vim /etc/profile


2)開啟編輯:鍵盤按 i


3)操作:在檔案內容的末尾換行,新增以下配置程式碼

export JAVA_HOME=/usr/lib/jdk/jdk1.8.0_144

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=.:${JAVA_HOME}/bin:$PATH


4)退出:鍵盤按 Esc

5)儲存指令:wq!


到此就配置好了

6)使修改的配置立刻生效:

指令:source /etc/profile

方式二:修改當前使用者配置檔案,只作用於當前使用者

指令:vim ~/.bashrc

操作:設定與方式二相同,這裡不再贅述

使修改的配置立刻生效:

指令:source ~/.bashrc

3、最後檢視配置情況

指令1:java -version

指令2:javac -version

二、Java伺服器程式的部署和釋出

將jdk環境變數配置好後,我們就可以釋出java伺服器應用程式了。一般情況下,伺服器不需要介面,故我們先針對jar伺服器程式的部署作相應的介紹,然後再對war程式的部署作介紹。

1、將專案進行打包,打包成jar進行部署

將伺服器程式打包成jar有多種方式,現在我們就選其中兩種進行介紹:

1)通過IDE工具(Eclipse)匯出

  • 選中要匯出的專案檔案,然後右鍵“Export”
  • 選擇Java->JAR file

  • 點選"Next",然後選擇匯出的檔案內容,輸入匯出的位置及檔名

  • 然後點選"Next"


  • 下面進行選擇程式啟動的入口

  • 選擇後,點選"Finish"即可匯出成jar打包專案。

2)通過maven打包專案(推薦)

  • 建立pom.xml檔案
  • 然後我們看看pom.xml配置檔案的基本結構
<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.test.server</groupId>
	<!--直接用專案 -->
	<artifactId>sdl_util</artifactId>
	<!--當前專案的版本號 -->
	<version>1.0.0</version>
	<!--打包成的檔案格式 -->
	<packaging>jar</packaging>
	<!--專案名 -->
	<name>sdl_util</name>

	<url>http://maven.apache.org</url>
	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
	</properties>
	<!--配置依賴的jar包及其版本號 -->
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<resources>
			<!--這裡配置打包時需要加入的檔案 -->
			<resource>
				<!--這裡表示打包配置檔案的來源目錄 -->
				<directory>src/main/java</directory>
				<!--表示只打包字尾名為.xml的所有檔案 -->
				<includes>
					<include>**/*.xml</include>
				</includes>
				<filtering>true</filtering>
			</resource>
		</resources>
		<plugins>
			<plugin>
				<!--配置打包使用的編譯工具及使用的版本號 -->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.5</version>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
					<encoding>UTF-8</encoding>
					<archive>
						<manifest>
							<!-- 此處指定main方法入口的class -->
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib/</classpathPrefix>
							<mainClass>com.start.StartServer</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-shade-plugin</artifactId>
				<version>2.4.3</version>
				<configuration>
					<transformers>
						<transformer
							implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
							<manifestEntries>
								<Main-Class>com.start.StartServer</Main-Class>
								<X-Compile-Source-JDK>1.8</X-Compile-Source-JDK>
								<X-Compile-Target-JDK>1.8</X-Compile-Target-JDK>
							</manifestEntries>
						</transformer>
					</transformers>
				</configuration>
				<executions>
					<execution>
						<phase>package</phase>
						<goals>
							<goal>shade</goal>
						</goals>
						<configuration>
							<!-- 如果把所有包打在一起,可能出現核心包缺失問題,故如果要把所有依賴包打在一起,請設定為false -->
							<minimizeJar>false</minimizeJar>
							<shadedArtifactAttached>true</shadedArtifactAttached>
							<shadedClassifierName>with_dependency</shadedClassifierName>
						</configuration>
					</execution>
				</executions>
			</plugin>
			<plugin>
				<!--配置打包使用的打包工具及使用的版本號 -->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-jar-plugin</artifactId>
				<version>2.4</version>
				<configuration>
					<archive>
						<manifest>
							<addClasspath>true</addClasspath>
							<classpathPrefix>lib</classpathPrefix>
							<mainClass>com.start.StartServer</mainClass>
						</manifest>
					</archive>
				</configuration>
			</plugin>
			<plugin>
				<!--配置打包所依賴的目標目錄,即將依賴包打包到根據了的lib下 -->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.10</version>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>${project.build.directory}/lib</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<repositories>
		<!--配置遠端倉庫的地址 -->
		<repository>
			<id>central</id>
			<name>Maven Repository Switchboard</name>
			<layout>default</layout>
			<url>http://repo1.maven.org/maven2</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>
  • 將pom.xml放在專案程式碼同級目錄下

  • 選中"pom.xml"檔案,右鍵單擊,選單中選中"Run As"
  • 然後再彈出的選單中選中"Maven install"即可
  • 出現下面狀態日誌時,代表成功

2、將打包好的jar專案釋出到linux環境中

1)運用工具(我用的工具:SecureCRSecureFXPortable64)將jar專案檔案放到需要釋出的目錄中

說明:這裡,我把配置檔案放在單獨的同級目錄中的(java打包方式舉例如下圖),同時因為maven中也配置了將依賴包打包到lib下,即訪問與專案同級的目錄;

public class Config {  
    private static final String TAG = Config.class.getName();  
    /** 
     * Server監聽埠 
     */  
    public static int server_port;  
    public static String pathTail = "/config.properties";  
    // 非Eclipse開發環境的線上環境  
    public static String serverPath = System.getProperty("user.dir") + "/config" + pathTail;  
    // Eclipse開發環境  
    public static String devPath = System.getProperty("user.dir") + "/src/main/java" + pathTail;  
    static {  
        init();  
        Runnable runnable = new Runnable() {  
            public void run() {  
                init();  
            }  
        };  
        ScheduledExecutorService service = Executors.newSingleThreadScheduledExecutor();  
        // 第二個引數為首次執行的延時時間,第三個引數為定時執行的間隔時間  
        service.scheduleAtFixedRate(runnable, 1, 15, TimeUnit.MINUTES);  
    }  
  
    public static void init() {  
        Properties props = new Properties();  
        InputStream ips = null;  
        BufferedReader bufferReader = null;  
        try {  
            if (new File(devPath).exists()) {  
                ips = new FileInputStream(devPath);  
            } else {  
                ips = new FileInputStream(serverPath);  
            }  
            bufferReader = new BufferedReader(new InputStreamReader(ips, "utf-8"));  
            props.load(bufferReader);  
            server_port = Integer.parseInt(props.getProperty("server_port"));  
        } catch (Exception e1) {  
            LogUtil.error(TAG, e1);  
        } finally {  
            try {  
                if (props != null)  
                    props.clear();  
                if (bufferReader != null)  
                    bufferReader.close();  
                if (ips != null)  
                    ips.close();  
            } catch (IOException e) {  
                // TODO Auto-generated catch block  
                LogUtil.error(TAG, e);  
            }  
        }  
    }  
}

2)然後在命令視窗中用指令執行專案檔案

指令:nohup java -jar sdl_util-1.0.0.jar& 


說明:nohup可以將日誌輸出到專案同級目錄中(下圖),末尾加"&"表示以服務的形式執行在後臺,即關掉該命令視窗後,程式也照樣執行,如果不加,則當命令視窗關閉時,服務程式也會停掉。


到此,關於jar專案的部署就已經講解完了。

3、將專案進行打包,打包成war進行部署

與打包成jar一樣,也介紹兩種方式:

1)通過IDE工具(Eclipse)匯出

  • 選中要匯出的專案檔案,然後右鍵“Export”
  • 選擇WAR file
  • 然後選擇匯出的路徑

  • 然後點選Finish就可以了

2)通過maven打包專案(推薦)

  • 我們以打包一個spring mvc+mongo+mysql+redis的專案為例子
  • 建立pom.xml檔案
  • 然後我們看看pom.xml配置檔案的基本結構
<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<!-- 打包的組名 -->
	<groupId>com.deelock.server</groupId>
	<!-- 這裡預設打包名 -->
	<artifactId>file_server</artifactId>
	<!-- 打包成war包 -->
	<packaging>war</packaging>
	<!-- war的版本號 -->
	<version>1.0.0</version>
	<name>file_server</name>
	<url>http://maven.apache.org</url>

	<!-- 常量屬性 -->
	<properties>
		<!-- 編碼集 -->
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<java.version>1.8</java.version>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<!-- spring版本 -->
		<springframework.version>4.3.7.RELEASE</springframework.version>
	</properties>
	<!-- 程式依賴的包名 -->
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>javax.servlet-api</artifactId>
			<version>3.0.1</version>
		</dependency>
		<dependency>
			<groupId>commons-logging</groupId>
			<artifactId>commons-logging</artifactId>
			<version>1.2</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context-support</artifactId>
			<version>${springframework.version}</version>
		</dependency>
		<dependency>
			<groupId>org.apache.tomcat</groupId>
			<artifactId>tomcat-jdbc</artifactId>
			<version>9.0.0.M25</version>
		</dependency>
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.44</version>
		</dependency>
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>fastjson</artifactId>
			<version>1.2.9</version>
		</dependency>
		<dependency>
			<groupId>com.aliyun.oss</groupId>
			<artifactId>aliyun-sdk-oss</artifactId>
			<version>2.8.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-slf4j-impl</artifactId>
			<version>2.6.2</version>
		</dependency>
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.6.2</version>
		</dependency>
		<dependency>
			<groupId>redis.clients</groupId>
			<artifactId>jedis</artifactId>
			<version>2.8.2</version>
		</dependency>
		<dependency>
			<groupId>org.bouncycastle</groupId>
			<artifactId>bcprov-jdk16</artifactId>
			<version>1.46</version>
		</dependency>
		<dependency>
			<groupId>org.freemarker</groupId>
			<artifactId>freemarker</artifactId>
			<version>2.3.27-incubating</version>
		</dependency>
		<dependency>
			<groupId>commons-io</groupId>
			<artifactId>commons-io</artifactId>
			<version>2.4</version>
		</dependency>
		<dependency>
			<groupId>commons-fileupload</groupId>
			<artifactId>commons-fileupload</artifactId>
			<version>1.3.2</version>
		</dependency>
		<dependency>
			<groupId>io.netty</groupId>
			<artifactId>netty-all</artifactId>
			<version>4.1.14.Final</version>
		</dependency>
		<dependency>
			<groupId>io.netty</groupId>
			<artifactId>netty-all</artifactId>
			<version>4.1.14.Final</version>
			<classifier>javadoc</classifier>
		</dependency>
		<dependency>
			<groupId>org.mongodb</groupId>
			<artifactId>mongo-java-driver</artifactId>
			<version>3.5.0</version>
		</dependency>
	</dependencies>
	<build>
		<resources>
			<!-- 打包配置檔案 -->
			<resource>
				<!-- 打包配置檔案的位置 -->
				<directory>src/main/java</directory>
				<!-- 打包配置檔案的型別,這裡只打包.properties和.xml的字尾檔案 -->
				<includes>
					<include>**/*.properties</include>
					<include>**/*.xml</include>
				</includes>
				<filtering>true</filtering>
			</resource>
		</resources>
		<!-- 打包名 -->
		<finalName>file_server</finalName>
		<plugins>
			<plugin>
				<!--打包工具,依賴包打包到同級目錄的lib中 -->
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.10</version>
				<executions>
					<execution>
						<id>copy-dependencies</id>
						<phase>package</phase>
						<goals>
							<goal>copy-dependencies</goal>
						</goals>
						<configuration>
							<outputDirectory>${project.build.directory}/lib</outputDirectory>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
	<repositories>
		<!--打包依賴包下載的遠端倉庫 -->
		<repository>
			<id>central</id>
			<name>Maven Repository Switchboard</name>
			<layout>default</layout>
			<url>http://repo1.maven.org/maven2</url>
			<snapshots>
				<enabled>false</enabled>
			</snapshots>
		</repository>
	</repositories>
</project>
  • 將pom.xml放在專案程式碼同級目錄下


  • 選中"pom.xml"檔案,右鍵單擊,選單中選中"Run As"
  • 然後再彈出的選單中選中"Maven install"即可
  • 出現下面狀態日誌時,代表成功

4、將打包好的war專案釋出到linux環境中(這裡是tomcat)

1)運用工具(我用的工具:SecureCRSecureFXPortable64)將war專案檔案放到需要釋出的目錄中

2)然後通過啟動tomcat就可以運行了

執行指令:./startup.sh

到此,我們把專案打包成jar和war介紹完了(如果不會安裝tomcat請檢視我們另一篇文章)。

三、ubuntu下的防火牆簡單管理

如果作為新手,我們將專案部署完後去訪問,有時發現居然訪問不了,然後把自己寫的伺服器程式除錯了一遍又一遍居然都找不到原因,那麼我要告訴你,你確定防火牆作了設定了?

下面介紹一下ubuntu中防火牆設定相關的指令(注:如果是root使用者許可權,不需要加sudo)

1、開啟80埠(ubuntu下執行)

指令:sudo ufw allow 80


2、防火牆開啟(ubuntu下執行)

指令:sudo ufw enable

3、防火牆重啟(ubuntu下執行)

指令:sudo ufw reload

4、檢視本地的埠開啟情況(ubuntu下執行)

指令:sudo ufw status

5、測試遠端主機的埠是否開啟(windows命令列下執行)

指令:telnet 192.168.1.103 80

6、關閉防火牆

指令:sudo ufw disable

7、禁止外部訪問80

指令:sudo ufw delete allow 80

8、允許此IP訪問所有的本機埠

指令:sudo ufw allow from 192.168.1.1

四、檢視專案程序id並殺死
這裡我們如果想暴力停止專案,我們可以用如下操作(以java,tomcat為例)

1)檢視java專案

指令:ps -ef|grep java


2)檢視tomcat專案

指令:ps -ef|grep tomcat

3)殺死該玩意兒(java)

指令:kill -9 1093