開機自啟動: 系統開機自啟動 和 軟件開機自啟動。(軟件開機自啟動是指隨系統開機自啟動的軟件), 兩者之間的關系:可類比 windows 系統開機自啟動 和 隨系統開機自啟動的軟件。
詳細參考“win7 系統 和 軟件開機自啟動之間的區別”
首先了解一下Ubuntu關於啟動項的大致分類,每一類都分為系統級和用戶級
第一類upstart,或者叫job,由init管理,配置文件目錄/etc/init,~/.init
第二類叫service,由rc.d管理,配置文件目錄/etc/init.d,以及/etc/rc.local文件 ---管理進程
第三類叫cron,由contab管理,使用crontab進行配置 ---定期管理
第四類叫startup,由xdg管理,配置文件目錄/etc/xdg/autostart,以及~/.config/autostart
運行命令:runlevel,可以查看自己系統的當前運行等級。
upstart任務適用於runlevel<5的腳本和程序,service任務適用於runlevel<=5的任務,cron任務則不一定,而startup一般工作在runlevel=5,也就是桌面級。
對於普通用戶而言,你的桌面級應用應該使用startup,服務級應用(比如某些功能性的軟件腳本)應該使用service,常規性配置可以使用cron,而與啟動順序有關的最好使用upstart。
開機自動運行程序
Linux加載后, 它將初始化硬件和設備驅動, 然后運行第一個進程init。init根據配置文件繼續引導過程,啟動其它進程。
/etc/rc.local腳本是一個ubuntu系統中自帶的開機腳本,該腳本通常是系統最后啟動的
登錄時自動啟動
用戶登錄時,bash先自動執行系統管理員建立的全局登錄script:/etc/profile.d。
退出登錄時自動運行
退出登錄時,bash自動執行退出登錄腳本: /.bash_logout。
所以只需要修改~/bash_logout,該文件即可,在文件最后加上想要執行的命令
定期自動運行程序
Linux有一個稱為crond的守護程序,主要功能是周期性地檢查 /var/spool/cron目錄下的一組命令文件的內容,並在設定的時間執行這些文件中的命令。用戶可以通過crontab 命令來建立、修改、刪除這些命令文件。
定時自動執行程序
定時執行命令at 與crond 類似(但它只執行一次):命令在給定的時間執行,但不自動重復。at命令的一般格式為:at [ -f file ] time ,在指定的時間執行file文件中所給出的所有命令。
Ubuntu開機后文件執行順序,跟大多數的Linux系統一樣,Ubuntu的開機順序如下:
- 加載BIOS,讀取MBR(Main Boot Record)主引導記錄,啟動Boot Manager(啟動引導管理器)
- 加載系統內核,啟動init進程,init進程是Linux的根進程,所有的系統進程都是它的子進程。在/etc 下有init和init.d兩個文件夾,init文件夾內都是配置文件,init.d文件夾下都是可執行文件。
- 啟動init進程,第一個運行的程序就是/sbin/init 該程序會讀取/etc/inittab文件,但是在Ubuntu下,沒有這個文件,取而代之的是 /etc/init/rc-sysinit.conf,主要作用就是設定Linux運行等級
- 首先執行/etc/rcS.d/ 目錄下的啟動腳本,然后是/etc/rc*.d/ 目錄。這里的/etc/rc*.d文件夾的腳本文件的鏈接目標為:/etc/init.d文件夾下的相應腳本(* 為運行的級別,0-6級別。如果您的運行級別為5,則執行 rc5.d ) ,命令:runlevel,查看運行級別。
- 根據 /etc/rcS.d/文件夾中對應的腳本,啟動 Xwindow 服務器 xorg,Xwindow 為 Linux 下的圖形用戶界面系統。
- 啟動登錄界面,等待用戶登錄。
Ubuntu 設置系統環境變量和開機自啟動
詳細查看博客原文:“開機自啟動”
Ubuntu 開機自啟動有4種方式實現,如下:
1、 自動啟動應用程序——rc.local腳本
① 在/etc/init.d/目錄下創建腳本
vi /etc/init.d/nginx
② 更改腳本權限
chmod 775 /etc/init.d/nginx
③ 編寫腳本內容
#! /bin/sh set -e PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DESC="nginx daemon" NAME=nginx DAEMON=/usr/local/nginx/sbin/$NAME SCRIPTNAME=/etc/init.d/$NAME PIDFILE=/var/run/$NAME.pid # If the daemon file is not found, terminate the script. test -x $DAEMON || exit 0 d_start() { $DAEMON || echo -n " already running" } d_stop() { kill -QUIT `cat $PIDFILE` || echo -n " not running" } d_reload() { kill -HUP `cat $PIDFILE` || echo -n " could not reload" } case "$1" in start) echo -n "Starting $DESC: $NAME" d_start echo "." ;; stop) echo -n "Stopping $DESC: $NAME" d_stop echo "." ;; reload) echo -n "Reloading $DESC configuration..." d_reload echo "reloaded." ;; restart) echo -n "Restarting $DESC: $NAME" d_stop # Sleep for two seconds before starting again, this should give the # Nginx daemon some time to perform a graceful stop. sleep 2 d_start echo "." ;; *) echo "Usage: $SCRIPTNAME {start|stop|restart|reload}" >&2 exit 3 ;; esac exit 0
④ 設置開機啟動
1、sysv-rc-conf是一個強大的服務管理程序
1)運行:# sysv-rc-conf
#sudo apt-get update
#sudo apt-get install sysv-rc-conf ---安裝 sysv-rc-conf
rc.local腳本是一個Ubuntu開機后會自動執行的腳本,在該腳本內添加命令行,開機時會自動執行。
2) 將 nginx 腳本直接加入到系統自動啟動列表中
例如把 /etc/init.d/nginx 加入到系統自動 啟動列表中:
運行命令:#sudo sysv-rc-conf nginx on ---運行完這個命令,rc5.d 目錄中會自動生成一個 S20nginx 的文件。
2、 自動啟動服務——update-rc.d
直接改/etc/rc0.d ~ /etc/rc6.d和/etc/rcS.d下的東西,S開頭的表示啟動,K開頭的表示不啟動,例如:想關閉vsftpd的開機自動啟動,只需sudo mv /etc/rc2.d/S20vsftpd /etc/rc2.d/K20vsftpd 就可以了。
經查看,我們當前的啟動級別是5,那么我們進入rc5.d目錄,同時創建啟動腳本,那么開機時就會自動啟動該程序。不過普遍的我們都是在 /etc/init.d/ 目錄下創建該腳本,然后通過軟鏈接到rcN.d目錄下。
3、 啟動應用程序首選項
4、 使用Systemd
5. 將啟動腳本 .sh 文件,放入 rc*.local 文件中
如
查看系統安裝並運行jdk 的路徑 :運行Linux: java -verbose JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 --運行jdk的路徑 JAVA_BIN=$JAVA_HOME/bin JRE_HOME=$JAVA_HOME/jre JRE_BIN=$JRE_HOME/bin PATH=$JAVA_BIN:$JRE_BIN:$PATH export JAVA_HOME JRE_HOME PATH sh /usr/local/tomcat1-8080/bin/startup.sh sh /usr/local/tomcat2-8081/bin/startup.sh
最后,重啟服務器進行測試,執行命令:reboot -n。reboot -n 命令是服務器保存數據后關機並重啟
此方法最簡單