Linux嵌入式相關項目走到最後很難避開要開機自啓一些應用程序或者腳本等,最近也在幫助同事作這個事情,之前本身玩板子的時候都是較爲隨便的在/etc/rc.local中添加就能夠了,可是項目的話仍是走標準一些,不只爲了本身之後的維護,也爲了之後同事的維護。因此分享下面的文章linux
推薦:shell
啓動腳本和service、chkconfig:http://blog.csdn.net/taiyang1987912/article/details/41698817ubuntu
轉自:http://blog.csdn.net/listener_ri/article/details/45128569bash
當前系統環境爲:Linux mint mate 17.1(基於ubuntu14.04的衍生版)網絡
首先架構
/etc/rc*.d文件夾中的腳本文件的連接目標爲:/etc/init.d文件夾下的腳本(*爲系統運行級別‘數字’和字母:S,系統優先運行rcS.d目錄下的腳本,而後運行rcN.d下的腳本)app
/etc/inittab: inittab爲系統的PID=1的進程,決定這系統啓動調用哪些啓動腳本文件ide
在運行級別對應的文件夾中,您能夠看到許多文件名以「S##」和「K##」起始的啓動腳本連接測試
init 進程將以「start」爲參數,按文件名順序執行全部以「S##」起始的腳本。腳本名稱中的數字越小,它將被越早執行。網站
例如在 「/etc/rc2.d/」文件夾中,「S13gdm」文件名中的數字小於「S23xinetd」,「S13gdm」將比「S23xinetd」先執行。
若是一個腳本連接,以「K##」起始,表示它將以「stop」參數被執行。若是相應服務沒有啓動,則不執行該腳本。
你能夠手動運行帶有如下參數的啓動腳本,來控制系統服務。
start 啓動
stop 中止
restart 重啓
例如:
/etc/rc2.d/K20powernowd start
有 時您並不清楚當前運行級別,該運行級別下未必有相應腳本;並且此類腳本的前三位字符並不固定,不便於記憶。
這時,您能夠直接使用 「/etc/init.d/」文件夾中的啓動腳本(由於「/etc/rcX.d/」中的啓動腳本都是連接到「/etc/init.d/」文件夾下相應腳本)
具體都有那些系統服務腳本,能夠看另外一篇文章:《ubuntu中init.d文件夾中經常使用系統服務腳本》
upstart任務適用於runlevel<5的腳本和程序,service任務適用於runlevel<=5的任務,cron任務則不必定,而startup通常工做在runlevel=5,也就是桌面級。
對於普通用戶而言,你的桌面級應用應該使用startup,服務級應用(好比某些功能性的軟件腳本)應該使用service,常規性配置可使用cron,而與啓動順序有關的最好使用upstart。
Linux加載後, 它將初始化硬件和設備驅動, 而後運行第一個進程init。init根據配置文件繼續引導過程,啓動其它進程。一般狀況下,修改放置在
目錄下的腳本文件,可使init自動啓動其它程序。例如:編輯/etc/rcS.d/rc.local(也就是/etc/rc.local,由於rcS.d連接目標爲/etc) 文件(該文件一般是系統最後啓動的腳本),
在文件最末加上一行「xinit」或「startx」,能夠在開機啓動後直接進入X-Window。
用戶登陸時,bash先自動執行系統管理員創建的全局登陸script :
/ect/profile(大多在此文件中設置環境變量,它是整個桌面環境使用的一個shell進程,也就是登陸shell)
>>>在linux中的shell能夠分爲:登陸shell,非登陸交互式shell,非登陸非交互式shell(執行shell腳本),
>>>具體能夠查看另外一篇文章:《 linux中各個shell配置文件的做用域和啓動時間 》
而後bash在用戶起始目錄下按順序查找三個特殊文件中的一個:
但只執行最早找到的一個。所以,只需根據實際須要在上述文件中加入命令就能夠實現用戶登陸時自動運行某些程序(相似於DOS下的Autoexec.bat)。
退出登陸時,bash自動執行我的的退出登陸腳本
例如,在/.bash_logout中加入命令「tar -cvzf c.source.tgz *.c」,則在每次退出登陸時自動執行 「tar」 命令備份 *.c 文件。
Linux有一個稱爲crond的守護程序,主要功能是週期性地檢查 /var/spool/cron目錄下的一組命令文件的內容,並在設定的時間執行這些文件中的命令。用戶能夠經過crontab 命令來創建、修改、刪除這些命令文件。
例如,創建文件crondFile,內容爲「00 9 23 Jan * HappyBirthday」,運行「crontabcronFile」命令後,每當元月23日上午9:00系統自動執行「HappyBirthday」的程序(「*」表示無論當天是星期幾)。
定時執行命令at 與crond 相似(但它只執行一次):命令在給定的時間執行,但不自動重複。at命令的通常格式爲:at [ -f file ] time ,在指定的時間執行file文件中所給出的全部命令。也可直接從鍵盤輸入命令:
$ at 12:00 at>mailto Roger -s ″Have a lunch″ < plan.txt at>Ctr-D Job 1 at 2000-11-09 12:00
2000-11-09 12:00時候自動發一標題爲「Have a lunch」,內容爲plan.txt文件內容的郵件給Roger.
方式1:rc.local
Ubuntu開機以後會執行/etc/rc.local文件中的腳本,因此咱們能夠直接在/etc/rc.local中添加啓動腳本。
固然要添加到語句:exit 0 前面才行。
方式2:rcN.d
若是要添加爲開機啓動執行的腳本文件,可先將腳本複製或者軟鏈接到/etc/init.d/目錄下,而後用:update-rc.d xxx defaults NN命令(NN爲啓動順序),將腳本添加到初始化執行的隊列中去。
注意若是腳本須要用到網絡,則NN需設置一個比較大的數字,如98 。
另一種是
方式3:systemd