1. 程式人生 > >ubuntu啟動時執行啟動指令碼流程

ubuntu啟動時執行啟動指令碼流程

當前系統環境為:linux mint mate 17.1(基於ubuntu14.04的衍生版)

查閱資料後總結如下:

首先:

/etc/rc.d連結目標為:/etc

/etc/rc*.d資料夾中的指令碼檔案的連結目標為:/etc/init.d資料夾下的指令碼(*為系統執行級別‘數字’和字母:S,系統優先執行rcS.d目錄下的指令碼,然後執行rc‘數字’.d下的指令碼)

Linux系統主要通過以下步驟啟動:

1、啟動Boot Manager

2、載入系統核心,啟動init程序
      init程序是Linux的根程序,所有的系統程序都是它的子程序。

3、init程序讀取“/etc/inittab”檔案中的資訊

      進入inittab中預設的執行級別,按順序執行該執行級別對應資料夾(init*.d)下的指令碼。指令碼通常以“start”引數啟動,並指向一個系統中的程式。
      通常情況下,“/etc/rcS.d/”目錄下的啟動指令碼首先被執行,然後是“/etc/rcN.d/”目錄。例如您設定的執行級別為3,那麼它對應的啟動目錄為“/etc/rc3.d/”。

4、根據“/etc/rcS.d/”資料夾中對應的指令碼啟動Xwindow服務“xorg”
      Xwindow為Linux下的圖形使用者介面系統。

5、啟動登入管理器,等待使用者登入

系統服務

在執行級別對應的資料夾中,您可以看到許多檔名以“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系統架構關於啟動項大致分為四類,每一類都分為系統級和使用者級

第一類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

upstart任務適用於runlevel<5的指令碼和程式,service任務適用於runlevel<=5的任務,cron任務則不一定,而startup一般工作在runlevel=5,也就是桌面級。

對於普通使用者而言,你的桌面級應用應該使用startup,服務級應用(比如某些功能性的軟體指令碼)應該使用service,常規性配置可以使用cron,而與啟動順序有關的最好使用upstart。

1. 開機啟動時自動執行程式

Linux載入後, 它將初始化硬體和裝置驅動, 然後執行第一個程序init。init根據配置檔案繼續引導過程,啟動其它程序。通常情況下,修改放置在

/etc/rc或

/etc/rc.d 或

/etc/rc?.d

目錄下的指令碼檔案,可以使init自動啟動其它程式。例如:編輯/etc/rc.d/rc.local(也就是/etc/rc.local,因為rc.d連結目標為/etc) 檔案(該檔案通常是系統最後啟動的指令碼),

在檔案最末加上一行“xinit”或“startx”,可以在開機啟動後直接進入X-Window。

2. 登入時自動執行程式

使用者登入時,bash先自動執行系統管理員建立的全域性登入script

/ect/profile(大多在此檔案中設定環境變數,它是整個桌面環境使用的一個shell程序,也就是登入shell

>>>在linux中的shell可以分為:登入shell,非登入互動式shell,非登入非互動式shell(執行shell指令碼),

然後bash在使用者起始目錄下按順序查詢三個特殊檔案中的一個:

/.bash_profile、

/.bash_login、

/.profile,

但只執行最先找到的一個。因此,只需根據實際需要在上述檔案中加入命令就可以實現使用者登入時自動執行某些程式(類似於DOS下的Autoexec.bat)。

3. 退出登入時自動執行程式

退出登入時,bash自動執行個人的退出登入指令碼

/.bash_logout。

例如,在/.bash_logout中加入命令“tar -cvzf c.source.tgz *.c”,則在每次退出登入時自動執行 “tar” 命令備份 *.c 檔案。

4. 定期自動執行程式

Linux有一個稱為crond的守護程式,主要功能是週期性地檢查 /var/spool/cron目錄下的一組命令檔案的內容,並在設定的時間執行這些檔案中的命令。使用者可以通過crontab 命令來建立、修改、刪除這些命令檔案。

例如,建立檔案crondFile,內容為“00 9 23 Jan * HappyBirthday”,執行“crontabcronFile”命令後,每當元月23日上午9:00系統自動執行“HappyBirthday”的程式(“*”表示不管當天是星期幾)。

5. 定時自動執行程式一次

定時執行命令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.

Ubuntu下新增開機啟動指令碼

Ubuntu開機之後會執行/etc/rc.local檔案中的指令碼,所以我們可以直接在/etc/rc.local中新增啟動指令碼。

當然要新增到語句:exit 0 前面才行。

如果要新增為開機啟動執行的指令碼檔案,可先將指令碼複製或者軟連線到/etc/init.d/目錄下,然後用:update-rc.d xxx defaults NN命令(NN為啟動順序),將指令碼新增到初始化執行的佇列中去。

注意如果指令碼需要用到網路,則NN需設定一個比較大的數字,如98 。


相關推薦

ubuntu啟動執行啟動指令碼流程

當前系統環境為:linux mint mate 17.1(基於ubuntu14.04的衍生版) 查閱資料後總結如下: 首先: /etc/rc.d連結目標為:/etc /etc/rc*.d資料夾中的指令碼檔案的連結目標為:/etc/init.d資料夾下的指令碼(*為系統執行級

docker容器啟動執行腳本 run /bin/bash執行多條指令

null 最好 執行 ash .sh bash 指令 docke -i 1、首先需要編寫需要啟動的腳本,並將腳本放在 /etc/init.d/目錄下 如:cs.sh 2、修改權限 3、chkconfig --add cs.sh 4、 chkconfig cs.sh on 啟

linux開機啟動自動執行某個指令碼

有時候我們需要在開機的拉起一個服務或程序。 比較方便的改法是在檔案/etc/rc.local,編輯這個檔案,在末尾新增 source 指令碼名稱.sh 指令碼run_httpd_server.sh的內容 #!/bin/bash export BASE_DIR=$(p

Java專案啟動執行指定方法的幾種方式

很多時候我們都會碰到需要在程式啟動時去執行的方法,比如說去讀取某個配置,預載入快取,定時任務的初始化等。這裡給出幾種解決方案供大家參考。 1. 使用@PostConstruct註解 這個註解呢,可以在Spring載入這個類的時候執行一次。來看一下下方程式碼。

Spring Boot應用程式在啟動執行一些操作的方法

如果想在生成物件時候完成某些初始化操作,而偏偏這些初始化操作又依賴於依賴注入,那麼就無法在建構函式中實現。為此,可以使用@PostConstruct註解一個方法來完成初始化,@PostConstruct註解的方法將會在依賴注入完成後被自動呼叫。 @PostConstruct是spring框架的註

配置web專案啟動,伺服器啟動執行該事件

1.配置web.xml檔案: <listener><listener-class>監聽器的路徑</listener-class></listener> 2.編寫java 類 package com.ronhe.romp.core.

kafka消費者監控,程式啟動執行

1.1 web.xml檔案新增listenner,如下: <listener> <listener-class>com.sinosoft.lis.listener.ConsumerThreadListener</listener-class>

spring定時器在啟動執行,用註解方式

這個問題被坑大發了,因為沒加<load-on-startup>1</load-on-startup>,定時器就是不起來。web.xml中,一定記得新增<load-on-startup>1</load-on-startup>,這樣

spring在web容器啟動執行初始化方法(四種方式)

需求:在tomcat啟動時開啟一個定時任務,或初始化slor索引 想法:容器啟動時執行方法,最容易想到的就是servlet中可以配置load-on-startup,設定一個正整數也就可以隨容器一起啟動。 問題:上面的方法很好,但是由於定時任務需要去操作資料庫,而專案

spring配置專案啟動執行

首先在配置檔案中新增配置 <!-- 配置專案啟動時執行  init方法--><bean id="smsmanage" class="com.longriver.sms.utils.S

Sping下新增啟動執行的方法

如何在spring專案中新增啟動時執行的方法 1.繼承InitializingBean 2.在spring配置檔案中新增bean 新增類 新增一個類,繼承自InitializingBean public class InitService im

Spring在Web容器啟動執行初始化方法

需求:在tomcat啟動時開啟一個定時任務。 想法:容器啟動時執行方法,最容易想到的就是servlet中可以配置load-on-startup,設定一個正整數也就可以隨容器一起啟動。 問題:上面的方法很好,但是由於定時任務需要去操作資料庫,而專案採用了spring的依賴注入來管理物件,而serv

spring boot 啟動執行程式碼(2)ApplicationListener

專案概覽:   StepExecutor: @Component @Slf4j public class StepExecutor implements Runnable { @Autowired private HelloService helloService;

避免啟動container執行shell指令碼執行完成後docker退出

http://www.linuxdiyf.com/linux/28568.html 問題 最近在使用 Dockerfile 啟動容器,發現使用Dockerfile呼叫容器裡面的shell,當shell執行完成以後,docker會退出容器。 分析 Docker

springboot 啟動執行單次任務

 最近做任務遇到一個問題,需要在專案啟動時候執行掃描資料庫表的任務,用於異常恢復容災,一開始想的是可不可以使用定時任務 程式碼如下 並且在啟動類加上 @EnableScheduling註解就可以實現定時去執行任務了 package com.beihui.servi

【Java】—— java Web 啟動自動執行程式碼的幾種方式(總有些程式碼需要在虛擬機器啟動執行)

Web容器啟動後執行程式碼的幾種方式其執行順序為:4===>5===>1===>2===>3即指定init-method的Bean開始執行接著實現Spring的Bean後置處理器開始執行然後是Servlet的監聽器執行再接下來是Servlet的過濾器執

SpringBoot 在啟動執行程式碼

在Spring boot專案的實際開發中,我們有時需要專案服務啟動時載入一些資料或預先完成某些動作。為了解決這樣的問題,Spring boot 為我們提供了一個方法:通過實現介面 CommandLineRunner 來實現這樣的需求。 實現方式:只需要一個類即可,無需其

CommandLineRunner、EnvironmentAware在Spring boot啟動執行初始化程式碼

@Component //如果有多個這樣的類時,可以通過Order指定執行順序,數值越小執行優先順序越高 @Order(value = 0) public class InitSystemConfig implements CommandLineRunner ,Environ

ASP.NET Core 3.x啟動執行非同步任務(一)

這是一個大的題目,需要用幾篇文章來說清楚。這是第一篇。   一、前言 在我們的專案中,有時候我們需要在應用程式啟動前執行一些一次性的邏輯。比方說:驗證配置的正確性、填充快取、或者執行資料庫清理/遷移等。 如何合理、有效、優雅地完成這個任務,是這個文章討論的主要內容。   要實現這樣一個功能,其實我們有幾

ASP.NET Core 3.x啟動執行非同步任務(二)

這一篇是接著前一篇在寫的。如果沒有看過前一篇文章,建議先去看一下前一篇,這兒是傳送門   一、前言 前一篇文章,我們從應用啟動時非同步執行任務開始,說到了必要性,也說到了幾種解決方法,及各自的優缺點。最後,還提出了一個比較合理的解決方法:通過在Program.cs里加入程式碼,來實現IWebHost啟動