1. 程式人生 > 其它 >Ubuntu設定開機自啟

Ubuntu設定開機自啟

一、rc.local指令碼

rc.local指令碼是一個Ubuntu開機後會自動執行的指令碼,我們可以在該指令碼內新增命令列指令。該指令碼位於/etc/路徑下,需要root許可權才能修改。

該指令碼具體格式如下:


#!/bin/sh -e#
# rc.local#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other# value on error.
#
# In order to enable or disable this script just change the execution# bits.
#
# By default this script does nothing.
exit 0
注意: 一定要將命令新增在exit 0之前。裡面可以直接寫命令或者執行Shell指令碼檔案sh。

二、關於放在rc.local裡面時不啟動的問題:

1、可以先增加日誌輸出功能,來檢視最終為什麼這個指令碼不啟動的原因,這個是Memcached啟動時的樣例檔案:


#!/bin/sh -e#
# rc.local#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other# value on error.
#
# In order to enable or disable this script just change the execution# bits.
#
# By default this script does nothing.#log
exec 2> /tmp/rc.local.log # send stderr from rc.local to a log file
exec 1>&2 # send stdout to the same log file
set -x # tell sh to display commands before execution #Memcached/usr/local/memcache/bin/memcached -p 11211 -m 64m -d -u rootexit 0
2、rc.local檔案頭部/bin/sh修改為/bin/bash

3、如果是執行sh檔案,那麼要賦予執行許可權sudo chmod +x xxx.sh,然後啟動時加上sudo sh xxx.sh

三、 update-rc.d增加開機啟動服務

給Ubuntu新增一個開機啟動指令碼,操作如下:

1、新建個指令碼檔案new_service.sh


#!/bin/bash# command content
exit 0
2、設定許可權


sudo chmod 755 new_service.sh#或者
sudo chmod +x new_service.sh
3、把指令碼放置到啟動目錄下


sudo mv new_service.sh /etc/init.d/
4、將指令碼新增到啟動指令碼

執行如下指令,在這裡90表明一個優先順序,越高表示執行的越晚


cd /etc/init.d/sudo update-rc.d new_service.sh defaults 90
5、移除Ubuntu開機指令碼


sudo update-rc.d -f new_service.sh remove
6、通過sysv-rc-conf來管理上面啟動服務的啟動級別等,還是開機不啟動


sudo sysv-rc-conf
7、update-rc.d的詳細引數

使用update-rc.d命令需要指定指令碼名稱和一些引數,它的格式看起來是這樣的(需要在 root 許可權下):


update-rc.d [-n] [-f] <basename> remove
update-rc.d [-n] <basename> defaults
update-rc.d [-n] <basename> disable|enable [S|2|3|4|5]
update-rc.d <basename> start|stop <NN> <runlevels>-n: not really
-f: force
其中:

disable|enable:代表指令碼還在/etc/init.d中,並設定當前狀態是手動啟動還是自動啟動。

start|stop:代表指令碼還在/etc/init.d中,開機,並設定當前狀態是開始執行還是停止執行。(啟用後可配置開始執行與否)

NN:是一個決定啟動順序的兩位數字值。(例如90大於80,因此80對應的指令碼先啟動或先停止)

runlevels:則指定了執行級別。

例項:

(1)、新增一個新的啟動指令碼sample_init_script,並且指定為預設啟動順序、預設執行級別(還記得前面說的嗎,首先要有實際的檔案存在於/etc/init.d,即若檔案/etc/init.d/sample_init_script不存在,則該命令不會執行):


update-rc.d sample_init_script defaults
上一條命令等效於(中間是一個英文句點符號):


update-rc.d sample_init_script start 20 2 3 4 5 . stop 20 0 1 6
(2)、安裝一個啟動指令碼sample_init_script,指定預設執行級別,但啟動順序為50:


update-rc.d sample_init_script defaults 50
(3)、安裝兩個啟動指令碼A、B,讓A先於B啟動,後於B停止:


update-rc.d A 10 40update-rc.d B 20 30
(4)、刪除一個啟動指令碼sample_init_script,如果指令碼不存在則直接跳過:


update-rc.d -f sample_init_script remove
這一條命令實際上做的就是一一刪除所有位於/etc/rcX.d目錄下指向/etc/init.d中sample_init_script的連結(可能存在多個連結檔案),update-rc.d只不過簡化了這一步驟。

(5)禁止Apache/MySQL相關元件開機自啟:


update-rc.d -f apache2 remove
update-rc.d -f mysql remove
8、服務的啟動停止狀態


#通過service,比如
sudo service xxx status
sudo service xxx startsudo service xxx stop
sudo service xxx restart
9、檢視全部服務列表


sudo service --status-all