導航:首頁 > 操作系統 > linux關機執行腳本

linux關機執行腳本

發布時間:2022-09-12 19:49:09

① 如何讓linux的腳本關閉終端後繼續執行

加& 是不行的。

因為不管是後台還是前台,都是terminal 的子進程。terminal一關,父進程在推出前,會殺掉所有的子進程。


Linux 里有一些工具,可以脫鉤父子進程。比如screen,ubuntu/debian用apt安裝。

apt-getinstallscreen


用法:在terminal里打

screen

然後運行你的程序。

再按

ctrl +a, ctrl +d.

就脫鉤了。可以關terminal了。


想掛鉤,用

screen-r

如果有多個脫鉤進程,比如

:
8881.pts-0.Jordan(Detached)
8494.pts-0.Jordan(Detached)

screen-r[pid]

比如

screen-r8881

② linux系統下 程序中運行操作系統命令,詳細解釋

S中設置的啟動設備(通常是硬碟)啟動,
接著啟動設備上安裝的引導程序lilo或grub開始引導Linux,Linux首先進行內核的引導,
接下來執行init程序,init程序調用了rc.sysinit和rc等程序,rc.sysinit和rc當完成系
統初始化和運行服務的任務後,返回init;init啟動了mingetty後,打開了終端供用戶登
錄系統,用戶登錄成功後進入了Shell,這樣就完成了從開機到登錄的整個啟動過程。

載入內核

LILO啟動之後,如果你選擇了Linux作為准備引導的操作系統,第一個被載入的東西就是內核。請記住此時的計算機內存中還不存在任何操作系統, PC(因為它們天然的設計缺陷)也還沒有辦法存取機器上全部的內存。因此,內核就必須完整地載入到可用RAM的第一個兆位元組之內。為了實現這個目的,內核是被壓縮了的。這個文件的頭部包含著必要的代碼,先設置CPU進入安全模式(以此解除內存限制),再對內核的剩餘部分進行解壓縮。

執行內核

內核在內存中解壓縮之後,就可以開始運行了。此時的內核只知道它本身內建的各種功能,也就是說被編譯為模塊的內核部分還不能使用。最基本的是,內核必須有足夠的代碼設置自己的虛擬內存子系統和根文件系統(通常就是ext2文件系統)。一旦內核啟動運行,對硬體的檢測就會決定需要對哪些設備驅動程序進行初始化。從這里開始,內核就能夠掛裝根文件系統(這個過程類似於Windows識別並存取C盤的過程)。內核掛裝了根文件系統之後,將啟動並運行一個叫做 init的程序。

注意:在這里我們故意略去了Linux內核啟動的許多細節,這些細節只有內核開發人員才感興趣。如果你好奇的話,可以訪問http://地址處的 「Kernel Hackers Guide」。

init進程

init進程是非內核進程中第一個被啟動運行的,因此它的進程編號PID的值總是1。init讀它的配置文件/etc/inittab,決定需要啟動的運行級別(Runlevel)。從根本上說,運行級別規定了整個系統的行為,每個級別(分別由0到6的整數表示)滿足特定的目的。如果定義了 initdefault級別,這個值就直接被選中,否則需要由用戶輸入一個代表運行級別的數值。

輸入代表運行級別的數字之後,init根據/etc/inittab文件中的定義執行一個命令腳本程序。預設的運行級別取決於安裝階段對登錄程序的選擇:是使用基於文本的,還是使用基於X-Window的登錄程序。

rc命令腳本程序

我們已經知道,當運行級別發生改變時,將由/etc/inittab文件定義需要運行哪一個命令腳本程序。這些命令腳本程序負責啟動或者停止該運行級別特定的各種服務。由於需要管理的服務數量很多,因此需要使用rc命令腳本程序。其中,最主要的一個是/etc/rc.d/rc,它負責為每一個運行級別按照正確的順序調用相應的命令腳本程序。我們可以想像,這樣一個命令腳本程序很容易變得難以控制!為了防止這類事件的發生,需要使用精心設計的方案。

對每一個運行級別來說,在/etc/rc.d子目錄中都有一個對應的下級目錄。這些運行級別的下級子目錄的命名方法是rcX.d,其中的X就是代表運行級別的數字。比如說,運行級別3的全部命令腳本程序都保存在/etc/rc.d/rc3.d子目錄中。

在各個運行級別的子目錄中,都建立有到/etc/rc.d/init.d子目錄中命令腳本程序的符號鏈接,但是,這些符號鏈接並不使用命令腳本程序在 /etc/rc.d/init.d子目錄中原來的名字。如果命令腳本程序是用來啟動一個服務的,其符號鏈接的名字就以字母S打頭;如果命令腳本程序是用來關閉一個服務的,其符號鏈接的名字就以字母K打頭。

許多情況下,這些命令腳本程序的執行順序都很重要。如果沒有先配置網路介面,就沒有辦法使用DNS服務解析主機名!為了安排它們的執行順序,在字母S 或者K的後面緊跟著一個兩位數字,數值小的在數值大的前面執行。比如:/etc/rc.d/rc3.d/S50inet就會在 /etc/rc.d/rc3.d/S55named之前執行(S50inet配置網路設置,S55named啟動DNS伺服器)。

存放在/etc/rc.d/init.d子目錄中的、被符號鏈接上的命令腳本程序是真正的實幹家,是它們完成了啟動或者停止各種服務的操作過程。當 /etc/rc.d/rc運行通過每個特定的運行級別子目錄的時候,它會根據數字的順序依次調用各個命令腳本程序執行。它先運行以字母K打頭的命令腳本程序,然後再運行以字母S打頭的命令腳本程序。對以字母K打頭的命令腳本程序來說,會傳遞Stop參數;類似地對以字母S打頭的命令腳本程序來說,會傳遞 Start參數。

編寫自己的rc命令腳本

在維護Linux系統運轉的日子裡,肯定會遇到需要系統管理員對開機或者關機命令腳本進行修改的情況。有兩種方法可以用來實現修改的目的:

● 如果所做的修改只在引導開機的時候起作用,並且改動不大的話,可以考慮簡單地編輯一下/etc/rc.d/rc.local腳本。這個命令腳本程序是在引導過程的最後一步被執行的。

● 如果所做的修改比較細致,或者還要求關閉進程使之明確地停止運行,則需要在/etc/rc.d/init.d子目錄中添加一個命令腳本程序。這個命令腳本程序必須可以接受Start和Stop參數並完成相應的操作。

第一種方法,編輯/etc/rc.d/rc.local腳本,當然是兩種方法中比較簡單的。如果想在這個命令腳本程序中添加內容,只需要使用喜歡的編輯器程序打開它,再把打算執行的命令附加到文件的末尾就可以了。這對一兩行的修改來說的確很便利。

如果確實需要使用一個命令腳本程序,這時必須選擇第二個方法。編寫一個rc命令腳本程序的過程並不像想像中那麼困難。我們下面就給出一個例子,看看它是怎樣實現的(順便說一句,你可以把我們的例子當作範本,按照自己的需要進行修改和添加)。

假設你打算每隔60分鍾調用一個特殊的程序來彈出一條消息,提醒自己需要從鍵盤前面離開休息一會兒,命令腳本程序將包括下面幾個部分:

● 關於這個命令腳本程序功能的說明(這樣就不會在一年之後忘記它);

● 在試圖運行它之前驗證這個命令腳本程序確實存在;

● 接受start和stop參數並執行要求的動作。

參數給定後,我們就可以編寫命令的腳本程序。這個程序很簡單,大家可以自己編寫一下,我在這里就不給出了。

編寫好新的命令腳本程序之後,再從相關的運行級別子目錄中加上必要的符號鏈接,來控制這個命令腳本程序的啟動或者停止。在我的印象中,只想讓它在運行級別3或者運行級別5中啟動,原因是我認為只有這兩個運行級別才是日常工作的地方。最後,希望這個命令腳本程序在進入運行級別6(重啟動)的時候被關閉。

激活或者禁止服務項目

有的時候會發現,在引導的時候並不需要某個特定的服務被啟動。如果你正在考慮使用Linux替換Windows NT的文件和列印伺服器,就更是如此。

我們已經知道,在特定的運行級別子目錄中給符號鏈接改個名稱,就可以讓該服務不被啟動,如把其名稱的第一個字母由S改為K。一旦熟練掌握了命令行和符號鏈接,就會發現這是激活或者禁止服務的最快辦法。

在學習這個改名方法的時候,可能會覺得圖形化的操作界面ksysv比較容易掌握。雖然它原來是設計使用在KDE環境里的,但在 Red Hat Linux 7.2下預設安裝的GNOME環境里也運行得很好。如果想啟動它,只需簡單地打開一個xterm窗口,並輸入ksysv命令就可以了。屏幕上會出現一個窗口,其中列出了能夠修改的全部參數,需要時還包括在線幫助。

警告:如果是在一個現實中的系統上學習本文的知識,要多多運用常識。當試著對啟動腳本程序進行修改的時候,要記住所做的修改可能會造成你的系統不能正常工作,而且無法採用重啟動的方法恢復。不要在正常運轉的系統上實驗新的設置,對你准備修改的文件要全部進行備份。最重要的是,在手邊要准備一張引導盤以防不測
另外,虛機團上產品團購,超級便宜

③ linux 中怎樣執行腳本

首先腳本需要有執行許可權

chmo+xfile.sh

執行腳本有三種方法:

1../file.sh

特點:開啟bash子進程來執行,也就是開啟額外的進程來進行,不影響原進程的變數、配置等

2.bashfile.sh

特點:和./file.sh相同

3.sourcefile.sh或者.file.sh

特點:在原bash進程中執行腳本。


第三種方法主要用於在腳本中切換用戶su、切換目錄cd等命令。

source和.命令是相同的。

你可以搜索source

補充,如何查看腳本運行是否開啟了bash子進程

  1. vim file.sh

  2. 寫入

    #!/bin/bash

    #echo $$命令會輸出bash進程ID

    echo $$

  3. 保存並賦予可執行許可權chmod u+x file.sh

  4. 在你的shell中輸入,echo $$ 屏幕輸出4176

  5. ./file.sh 屏幕輸出3600

  6. bash file.sh 屏幕輸出3984

  7. source file.sh 屏幕輸出4176 和 你直接在shell中輸出的一樣,說明是在同一個bash進程

④ 如何讓Linux的腳本關閉終端後繼續執行

在Linux的shell終端中執行一個命令時是不能關掉終端的,否則程序也會終止。
但是有些耗時比較長的命令是無法保證一直開著終端的,費電就不說了,畢竟網路還有不穩定的時候,一掉線程序也關掉了。
解決方法是nohup命令,在程序的前面加上nohup,程序的後面加上&,這樣程序就會一直執行直到結束。
比如:nohup php spider.php &
回車,然後提示一堆東西,再次回車,回到shell界面。
這就可以了。
還有一個問題:程序在執行中會輸出一些信息,如果後台執行的話,這些信息是不是沒法看了?(比如:程序執行出錯終端,想看看報錯信息之類的)。使用了nohup命令後,會在當前目錄下生成一個nohup.out的日誌文件,記錄的就是命令的輸出。

⑤ linux中關閉會話後正在執行的腳本會中斷嗎

會 除非你用 nohup 命令,並且後台運行。
然後用exit命令退出登錄。直接關閉窗口有可能出問題。

⑥ 怎樣讓linux系統關機前去執行一個腳本

我理解關機的時間是隨機的吧?
如果是隨機的,那就只能手動執行你想執行的腳本;
如果不是隨機的,那就設定在關機程序執行前執行你想執行的腳本。
感覺這個問題好像只能這樣答。

⑦ linux 中如何執行腳本

ash shell 腳本的方法有多種,現在作個小結。假設我們編寫好的shell腳本的文件名為hello.sh,文件位置在/data/shell目錄中並已有執行許可權。
方法一:切換到shell腳本所在的目錄(此時,稱為工作目錄)執行shell腳本:

cd /data/shell
./hello.sh

./的意思是說在當前的工作目錄下執行hello.sh。如果不加上./,bash可能會響應找到不到hello.sh的錯誤信息。因為目前的工作目錄(/data/shell)可能不在執行程序默認的搜索路徑之列,也就是說,不在環境變數PASH的內容之中。查看PATH的內容可用 echo $PASH 命令。現在的/data/shell就不在環境變數PASH中的,所以必須加上./才可執行。
方法二:以絕對路徑的方式去執行bash shell腳本:

/data/shell/hello.sh

方法三:直接使用bash 或sh 來執行bash shell腳本:

cd /data/shell
bash hello.sh



cd /data/shell
sh hello.sh

注意,若是以方法三的方式來執行,那麼,可以不必事先設定shell的執行許可權,甚至都不用寫shell文件中的第一行(指定bash路徑)。因為方法三是將hello.sh作為參數傳給sh(bash)命令來執行的。這時不是hello.sh自己來執行,而是被人家調用執行,所以不要執行許可權。那麼不用指定bash路徑自然也好理解了啊,呵呵……。
方法四:在當前的shell環境中執行bash shell腳本:

cd /data/shell
. hello.sh



cd /data/shell
source hello.sh

前三種方法執行shell腳本時都是在當前shell(稱為父shell)開啟一個子shell環境,此shell腳本就在這個子shell環境中執行。shell腳本執行完後子shell環境隨即關閉,然後又回到父shell中。而方法四則是在當前shell中執行的。

⑧ Linux停止服務時執行某腳本,啟動時執行某腳本怎麼寫

編輯/etc/rc.d/rc.local文件,把腳本加入 開啟服務的方法根據發行版不同,有區別,比如RHEL、CentOS 4/5/6: chkconfig servciename on

⑨ linux命令行下,怎麼關閉正在執行的bash腳本

killall 腳本名

就算屏幕上在一直列印,你只管輸入(盲輸或復制粘貼過來),完成後一個回車ok。
哪怕輸入的東西在屏幕上顯示時會被輸出攪亂,但實際是會被終端接收到標准輸入管道的。這個方法我剛剛也試過了,是可以的。

上面的用於後台運行情況。前台運行一般ctrl+c是可以終止的。

⑩ linux下正常關機之命令詳解

這里給大家介紹判斷下正常關機的問題。小編搜集了些資料供大家查看,希望大家從中能獲得幫助。
系統啟動的時候生成一個文件,正常關機的時候會刪除這個文件。網管員們則可以根據系統開機時有沒有那個文件來判斷是不是非正常關機,減少網路管理過程中出現故障的機率。
步驟:
在/etc/rc.d/init.d/下編程腳本。
判斷是否正常關機,和生成文件的腳本:touch-file.sh
#!/bin/sh
file=/tmp/check
if
[
-e
$
];then
echo
"this
is
not
normal
shutdown"
>>/var/log/checkmessage
else
echo
"this
is
normal
shutdown
and
touch
file"
>>/var/log/checkmessage
touch
$
fi
linux下正常關機刪除文件的腳本:rm-file.sh
#!/bin/sh
file=/tmp/check
echo
"this
is
normal
shutdown
and
rm
file"
>>/var/log/checkmessage
rm
-rf
$
讓腳本自動執行。
注意:
#ll
/etc/rc.d/rc0.d/
軟連接兩邊的名字不哪呢個相同,後一個可以用絕對路徑或是相對路徑,千萬保證兩邊的名字不一樣。
ln
-s
/etc/rc.d/rc6.d/K01rm-file
/etc/rc.d/init.d/rm-file.sh
ln
-s
/etc/rc.d/rc3.d/S01touch-file
/etc/rc.d/init.d/touch-file.sh
我的系統沒用到x-window,所以沒有level5,也就是不用在/etc/rc.d/rc5.d/下放腳本。
特別注意:
K開頭的代表系統關閉的時候執行,S開頭的代表開機的時候執行。注意腳本編寫的規范,因為有K開通的軟鏈接並不一定會在關機的時候自動去執行,這是為什麼呢?執行K腳本的時候會查詢/var/lock/subsys/下是否有與K開頭腳本同名的空文件名,如果沒有就不去執行,所以要按照腳本編寫的規范,啟動的時在/var/lock/subsys/先touch一個與K01後面同名的空文件:
#/var/lock/subsys
#touch
fm-file
以上給大家講解的是判斷在linux下正常關機的問題。

閱讀全文

與linux關機執行腳本相關的資料

熱點內容
如來佛祖命令雷神去下界 瀏覽:854
新電腦管家下載好怎麼解壓 瀏覽:528
php獲取介面數據 瀏覽:763
最後的命令 瀏覽:921
如何添加手機app桌面快捷圖標 瀏覽:427
ui設計師與程序員 瀏覽:417
壽司pdf 瀏覽:828
pythonbg是什麼 瀏覽:248
c數值演算法程序大全 瀏覽:785
android整點報時 瀏覽:221
稀土pdf 瀏覽:536
單片機電子鎖 瀏覽:596
通達信機智資金流指標公式源碼 瀏覽:216
php安裝xsl擴展 瀏覽:842
python如何使用help 瀏覽:367
上汽榮威app在哪裡查詢 瀏覽:903
冰櫃壓縮機溫度108 瀏覽:720
阿里雲郵smtp伺服器地址 瀏覽:252
解壓館認知理解 瀏覽:239
為什麼使用非官方伺服器會封號 瀏覽:9