Linux自定義可運行shell腳本並設置開機自啓

Linux自定義可運行shell腳本並設置開機自啓

自定義可運行shell腳本

創建文本文件vim test,並輸入如下文本

#!/bin/sh
# chkconfig:2345 60 30
# description:te
export JAVA_HOME=/usr/lib/jdk
export PATH=$JAVA_HOME/bin:$PATH
echo 開機啓動了 > /home/startTest

腳本的前三行爲固定格式
1、第一行#!/bin/sh首先指明腳本的解釋器(一定要在第一行,否則報錯)
2、第二行# chkconfig:2345 60 30chkconfig的第一個參數是指定腳本的運行等級,一般爲2345即可,第二個參數是腳本的啓動優先級(0-100),等級越高,優先級越低,也就啓動越晚,第三個參數是關閉優先級,同理啓動優先級。
3、腳本的描述信息
後面的代碼即爲需要執行的命令
通過service命令啓動的是否,環境變量無法使用(暫時還不知道什麼原因,有待查證),所以需要手動指定類似JAVA_HOME之類的環境變量。我發現這個原因是因爲腳本通過sh test運行的時候是沒有問題的。但是通過service test start就會報錯failed to run command 'java': No such file or directory

編輯好shell腳本之後,賦予腳本可執行權限chmod 777 ./test

在系統init目錄下建立腳本文件

這裏有兩種方式建立
1、直接將上一步創建的shell腳本copy到init目錄下cp ./test /etc/init.d/
使用這種方式的話,如果需要修改shell腳本就需要到init目錄下修改copy過來的文件
2、通過建立硬鏈接的方式,在init目錄下建立一個shell腳本的硬鏈接ln ./test /etc/init.d/

注:
這裏不可以建立軟連接
軟鏈接:
    1.軟鏈接,以路徑的形式存在。類似於Windows操作系統中的快捷方式
    2.軟鏈接可以 跨文件系統 ,硬鏈接不可以
    3.軟鏈接可以對一個不存在的文件名進行鏈接
    4.軟鏈接可以對目錄進行鏈接

硬鏈接:
    1.硬鏈接,以文件副本的形式存在。但不佔用實際空間。
    2.不允許給目錄創建硬鏈接
    3.硬鏈接只有在同一個文件系統中才能創建

所以,如果建立軟連接,系統是讀取不到shell腳本的具體內容的

增加test服務

使用chkconfig命令將剛剛增加到init目錄下的腳本添加成爲一個新的服務chkconfig --add test
這時候查看服務列表即可發現多了test服務

[root@VM_0_8_centos csdn]# chkconfig --list
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
[root@VM_0_8_centos csdn]# chkconfig --add test
[root@VM_0_8_centos csdn]# chkconfig --list
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
test			0:off	1:off	2:on	3:on	4:on	5:off	6:off

此時可以發現test服務的啓動等級就是按照腳本中註明的啓動等級# chkconfig:2345 60 30來的,我們也可以通過命令修改(下面的chkconfig命令詳解中有示例操作)。
其實這一步就相當於在系統的啓動等級目錄(/etc/rc0.d//etc/rc6.d)下創建了相應腳本的連接。

# 這裏沒有test服務
[root@VM_0_8_centos csdn]# ll /etc/rc3.d/
total 0
lrwxrwxrwx. 1 root root 20 Apr 21  2016 K50netconsole -> ../init.d/netconsole
lrwxrwxrwx. 1 root root 17 Apr 21  2016 S10network -> ../init.d/network

而且連接的命名是有規則的,以S(系統在啓動的時候,運行腳 本test2,就會添加一個start參數,告訴腳本,現在是啓動模式)或K(系統在關閉系統的時候,會運行test2,添加一個stop,告訴腳本,現在是關閉模式)作爲第一個字符。後面的數字爲啓動或關閉的優先級(0-100,也就是在腳本中註明的內容),後面就是腳本的名稱。所以根據設置的運行等級和啓動關閉的優先級不同,在相對應的啓動等級目錄中的連接名稱也是分爲兩種。

完成自啓

這個時候重啓就可以實現服務自啓了。
也可以通過service test startservice test stop來啓動或停止服務。(但我沒測試過,估計需要腳本接收start或stop參數完成不同操作。)

chkconfig命令詳解

[root@VM_0_8_centos csdn]# chkconfig --help
chkconfig version 1.3.61 - Copyright (C) 1997-2000 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License.

usage:   chkconfig [--list] [--type <type>] [name] # 列出所有服務
         chkconfig --add <name> # 增加一個服務
         chkconfig --del <name> # 刪除一個服務
         chkconfig --override <name> 
         chkconfig [--level <levels>] [--type <type>] <name> <on|off|reset|resetpriorities> # 修改腳本的運行等級

# 示例
[root@VM_0_8_centos csdn]# chkconfig --list
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
test			0:off	1:off	2:on	3:on	4:on	5:on	6:off
[root@VM_0_8_centos csdn]# chkconfig --level 5 test off
[root@VM_0_8_centos csdn]# chkconfig --list
netconsole     	0:off	1:off	2:off	3:off	4:off	5:off	6:off
network        	0:off	1:off	2:on	3:on	4:on	5:on	6:off
test			0:off	1:off	2:on	3:on	4:on	5:off	6:off

查看服務啓動日誌

因爲我們寫的腳本有可能會有這種問題,所以查看啓動日誌還是很有必要的。
centos的系統日誌在/var/log/messages,直接vim即可。
我就是因爲#!/bin/sh沒有放在腳本的第一行報的錯,直接運行sh test的時候是沒有問題的,但是重啓系統就是啓動不起來,查看日誌才發現問題。

關於Linux系統日誌管理可以移步Linux系統日誌管理

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章