linux分享六 nohup與 ,守護程序

2022-04-03 14:56:19 字數 3079 閱讀 2820

contab每秒執行指令碼,然後將把標準錯誤重定向到標準輸出(2>&1)以追加的方式寫入log_cronjob.txt。

補充:試想2>1代表什麼,2與》結合代表錯誤重定向,而1則代表錯誤重定向到乙個檔案1,而不代表標準輸出;換成2>&1,&與1結合就代表標準輸出了,就變成錯誤重定向到標準輸出。

另外,使用nohup實現不結束通話地執行命令。

nohup python logdatacollection.py >>/logs/log_cronjob.txt 2>&1 &

該命令可以在你退出帳戶/關閉終端之後繼續執行相應的程序。

使用nohup命令後,原程式的的標準輸出被自動改向到當前目錄下的nohup.out檔案,起到了log的作用,實現了完整的守護程序功能。

$ fetch &

當程式已經在前台執行的時候,可以使用^z將這個程式掛起,暫停執行。然後可以使用bg命令將這個掛起的程式放到後台執行,或者使用fg將某個在後台或掛起的程序放到前台執行。

當在後台執行了程式的時候,可以用jobs命令來檢視後台作業的狀態。在有多個後台程式時,要使用來引數的fg命令將不同序號的後台作業切換到前台上執行。

$ jobs

[1]+ running fetch &

$ fg %1

fetch

在啟動了多個程式之後,可以使用ps命令來檢視這些程序及其狀態。

$ ps

pid tt stat time command

501 p2 ss 0:00.24 -bash (bash)

988 p2 r+ 0:00.00 ps

765 p3 is+ 0:00.28 -bash (bash)

230 v0 is+ 0:00.14 -bash (bash)

顯示的結果包括程序的標識號pid,控制終端tt(p0表示控制終端為ttyp0),程序的狀態stat,程序使用的處理器時間time和具體的命令。

$ ps waux

user pid %cpu %mem vsz rss tt stat started time command

wb 989 0.0 0.4 400 236 p2 r+ 5:48pm 0:00.00 ps -aux

root 1 0.0 0.1 496 72 ?? is 10:12pm 0:00.02 /sbin/init --

root 2 0.0 0.0 0 0 ?? dl 10:12pm 0:07.05 (pagedaemon)

root 3 0.0 0.0 0 0 ?? dl 10:12pm 0:00.20 (vmdaemon)

root 4 0.0 0.0 0 0 ?? dl 10:12pm 0:04.27 (syncer)

root 27 0.0 0.0 204 0 ?? iws - 0:00.00 (adjkerntz)

root 91 0.0 0.5 820 328 ?? is 2:12pm 0:00.82 syslogd

daemon 100 0.0 0.0 792 0 ?? iws - 0:00.00 (portmap)

root 131 0.0 0.3 864 164 ?? is 2:12pm 0:00.06 inetd

root 134 0.0 0.3 980 192 ?? is 2:12pm 0:00.11 cron

root 138 0.0 0.6 1252 380 ?? is 2:12pm 0:00.11 sendmail: accepti

wb 230 0.0 1.1 1540 668 v0 is+ 2:12pm 0:00.14 -bash (bash)

root 231 0.0 0.0 824 0 v1 iws+ - 0:00.00 (getty)

root 232 0.0 0.0 824 0 v2 iws+ - 0:00.00 (getty)

root 500 0.0 0.9 876 524 ?? ss 4:19pm 0:01.78 telnetd

wb 501 0.0 1.4 1540 888 p2 ss 4:19pm 0:00.24 -bash (bash)

root 698 0.0 1.5 1644 900 ?? is 4:49pm 0:00.02 /usr/local/sbin/s

root 700 0.0 1.2 1308 748 ?? ss 4:49pm 0:00.22 /usr/local/sbin/n

root 702 0.0 3.4 2900 2112 ?? s 4:49pm 0:00.32 /usr/local/sbin/s

root 764 0.0 0.9 880 540 ?? is 5:10pm 0:00.22 telnetd

wb 765 0.0 1.7 1536 1052 p3 is+ 5:10pm 0:00.28 -bash (bash)

當使用者啟動乙個程序的時候,這個程序是執行在前台,使用與相應控制終端相聯絡的標準輸入、輸出進行輸入和輸出。即使將程序的輸入輸出重定向,並將程序放在後台執行,程序仍然和當前終端裝置有關係。正因為如此,在當前的登入會話結束時,控制終端裝置將和登入程序相脫離,那麼系統就向所有與這個終端相聯絡的程序傳送sighup的訊號,通知程序線路已經掛起了,如果程式沒有接管這個訊號的處理,那麼預設的反應是程序結束。因此普通的程式並不能真正脫離登入會話而執行程序,為了使得在系統登入後還可以正常執行,只有使用命令nohup來啟動相應程式。

從上面的ps的輸出結果可以看出,有些程式沒有控制終端,這些程式通常是一些後台程序。使用命令nohup當然可以啟動這樣的程式,但nohup啟動的程式在程序執行完畢就退出,而常見的一些服務程序通常永久的執行在後台,不向螢幕輸出結果。在unix中這些永久的後台程序稱為守護程序(daemon)。守護程序通常從系統啟動時自動開始執行,系統關閉時才停止。如果偶然某個守護程序消失了,那麼它提供的服務將不再能被使用。

在守護程序中,最重要的乙個是超級守護程序inetd,這個程序接管了大部分網路服務,但並不是對每個服務都自己進行處理,而是依據連線請求,啟動不同的服務程式與客戶機打交道。inetd支援網路服務種類在它的設定檔案/etc/inet.conf中定義。inet.conf檔案中的每一行就對應乙個埠位址,當inetd接受到連線這個埠的連線請求時,就啟動相應的程序進行處理。使用inetd的好處是系統不必啟動很多守護程序,從而節約了系統資源,然而使用inetd啟動守護程序相應反應會遲緩一些,不適合用於被密集訪問的服務程序

原創 Linux 中的 nohup 與

目錄測試 一直沒搞清楚nohup與 的區別,看著公司裡遺留的shell,也就稀里糊塗地用著.這是很糟糕的態度 使程序在後台執行,預設輸出到標準輸出 即當前螢幕 除非重定向輸出.此時忽略 sigint 訊號.若關閉會話,則程序會結束 程序仍舊在前台跑,預設輸出到nohup.out.此時程序忽略 sig...

Linux模擬shell小demo分享與記錄

首先宣告,其實是老師布置的作業,原始碼來自於乙個師兄,只做學習使用。原始碼鏈結 實現的主要功能如下 1.ls a d i l adil 2.echo 3.cat 4.mkdir 5.rmdir 6.rm 7.cd 8.chmod 9.pwd 10.wc 11.date 12.exit ctrl d ...

六 Linux的檔案許可權與目錄配置

1.在linux裡面,任何乙個檔案都具有 user,group及others 三種身份的個別許可權。以王三毛為例,王三毛這個 檔案 的user為王三毛,他屬於王大毛這個group,而張小豬相對於王三毛,則只是乙個 others 而已。無所不能的天神則是root。在我們linux系統當中,預設的情況下...