背景
渣渣筆記本電腦,作爲Linux服務器。將oracle 11g裝到了docker中(有關11g docker化安裝,將在其他文章講述),以便學習考取OCP證書。但是,開機後每次都需要su切換到root下起container,甚是繁瑣。因而思考Linux的開機啓動項。於是乎得到三種解決方案:
- 自啓動服務service
- Crontab---定時任務
- /etc/rc.local
本文講述第一種方案,自啓動服務。
環境
jwllinux@jwlLinux ~ $ uname -a Linux jwlLinux 4.4.0-21-generic #37-Ubuntu SMP Mon Apr 18 18:34:49 UTC 2016 i686 i686 i686 GNU/Linux
jwllinux@jwlLinux ~ $ hostnamectl Static hostname: jwlLinux Icon name: computer-laptop Chassis: laptop Machine ID: 30e8671244344b49af2510a06808f1b0 Boot ID: 32a4ae15a47e4694908e5f18faaa2c56 Operating System: Ubuntu 16.04 LTS Kernel: Linux 4.4.0-21-generic Architecture: x86 jwllinux@jwlLinux ~ $ lsb_release -d Description: Linux Mint 18 Sarah |
X86架構,Linux Mint 18
步驟
1. 在/etc/init.d 下建立相關程序的啓動腳本
vim /etc/init.d/testservcie
chmod 755 testservcie
jwllinux@jwlLinux ~ $ cat /etc/init.d/testservcie #!/bin/sh ### BEGIN INIT INFO # Provides: testservice # Required-Start: # Required-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: test for service # Description: test for service ### END INIT INFO
echo "1" exit 0 |
說明:/etc/init.d/下腳本即爲debian系列Linux系統init啓動項。其腳本的編寫需要遵循一定的風格(LSB風格),具體可以查看/etc/init.d/README。如:
Provides===提供了什麼服務;
Required-Start===服務啓動的依賴項
Default-Start===默認啓動層級(0~6)。
第0級:關閉系統(千萬不要把initdefault設置爲0,否則將開不了機)
第1級:單用戶模式
第2級:沒有網絡多用戶模式
第3級:有網絡多用戶模式
第4級:系統保留
第5級:有網絡和圖形的多用戶模式
第6級:重啓系統(千萬不要把initdefault設置爲6,否則電腦將一直開機重啓)
……
2. 註冊服務
systemctl enable testservcie
或
update-rc.d testservcie defaults
可能的報錯:(此服務已經被其他腳本提供)
此命令會解析腳本頭,在相應層級的啓動目錄下創建指向/etc/init.d/XXX的符號鏈接,如下:
3. 查詢註冊的服務
4. 查看服務狀態
5. service 服務名 start 手動啓動服務
6. service 服務名 stop 手動關閉服務
其他
如上步驟主要是使用systemctl命令註冊了服務,並用service命令對服務進行操作。Service命令還有許多相關參數,如reload、restart等,分別對應啓動腳本不同的處理邏輯。本文只是簡單介紹服務的註冊,有關啓動腳本的書寫,可參閱存量腳本。
補充
對於Redhat/ centos系列的Linux系統,服務的註冊可能是chkconfig命令,讀者可以需要根據自己OS的適配。