1. linux nohup如何停止
如果有關閉的腳本就執行腳本
否則直接kill進程吧
2. 怎麼關閉通過nohup運行的後台程序
很多朋友可能在實際的linux伺服器管理工作中,經常會為一些長時間運行的任務而頭疼,當有事離開我們關掉了連接終端斷開SSH後,剛才運行著的程序也自動被中斷。下面就介紹下如何讓我們的程序在斷開SSH後繼續在後行運行的方法。 一、使用nohup讓程序在後台繼續運行 常用命令:nohup ./home/nginx.sh & * 如果運行成功剛默認會將標准輸出重定向到當前目錄的nohup.out文件中,查看此文件,可以了解運行的進度; 二、使用screen讓程序在後台執行 screen是一個可以在多個進程之間多路利用一個物理終端的窗口管理器。Screen中有會話的概念,用戶可以在一個screen會話中創建多個screen窗口,在每一個screen窗口中就像操作一個真實的telnet/SSH連接窗口那樣。 1、安裝screen yum install screen 2、創建screen會話 3、暫時離開,保留screen會話中的任務或程序 當需要臨時離開時(會話中的程序不會關閉,仍在運行)可以用快捷鍵Ctrl+a d(即按住Ctrl,依次再按a,d) 4、恢復screen會話 當回來時可以再執行執行:screen -r wordname 即可恢復到離開前創建的lnmp會話的工作界面。 如果忘記或者剛開始沒有指定會話名,執行screen -ls列出當前的會話列表; [root@LF ~]# screen -ls There are screens on: 12738.wordname (Detached) 12839.hte1 (Detached) 2 Sockets in /var/run/screen/S-root 12738.wordname即為即才screen創建的會話,恢復回話:screen -r 12738 5、關閉screen會話 執行:exit 6、遠程演示 首先在伺服器上執行screen -S test創建一個screen的會話,觀眾可以鏈接到 遠程伺服器執行screen -x test 這樣觀眾的屏幕上就會出現和演示者同步的內容。 7、常用的快捷鍵 Ctrl + a c 在當前screen會話中創建窗口 Ctrl + a w 窗口列表 Ctrl + a n 下一個窗口 Ctrl + a p 上一個窗口 Ctrl + a 0-9 在第0個窗口和第9個窗口之間切換 摘取於:/manage/screen.html
3. linux後台自動執行命令nohup與日誌查看
在linux上執行腳孫含瞎本,當退出頁面或電腦鎖屏後,腳本就停止執行了。對需要長時間運行的腳本非常不友好。
nohup(no hang up)則空老尺:可以讓程序不掛斷執行。
& :可以讓程序在後台執行。
「> nohup.log」: 表示將日誌輸出到nohup.log文件上。
2>&1:表示將正確日誌、錯誤日誌都輸出到正確日誌指定的文件(nohup.log文件)上。
4. linux後台執行命令:&和nohup的用法,確實很實用
當我們在終端或控制台工作時,可能不希望由於運行一個作業而佔住了屏幕,因為可能還有更重要的事情要做,比如閱讀電子郵件。對於密集訪問磁碟的進程,我們更希望它能夠在每天的非負荷高峰時間段運行(例如凌晨)。為了使這些進程能夠在後台運行,也就是說不在終端屏幕上運行,有幾種選擇方法可供使用。
& :當在前台運行某個作業時,終端被該作業占據;可以在命令後面加上& 實現後台運行。例如:sh test.sh &
適合在後台運行的命令有f i n d、費時的排序及一些s h e l l腳本。在後台運行作業時要當心:需要用戶交互的命令不要放在後台執行,因為這樣你的機器就會在那裡傻等。不過,作業在後台運行一樣會將結果輸出到屏幕上,干擾你的工作。如果放在後台運行的作業會產生大量的輸出,最好使用下面的方法把它的輸出重定向到某個文件中:
這樣,所有的標准輸出和錯誤輸出都將被重定向到一個叫做out.file 的文件中罩核。
PS:當你成功地提交進程以後,就會顯示出一個進程號,可以用它來監控該進物猜掘程,或殺死它。(ps -ef | grep 進程號 或者 kill -9 進程號)
nohup:使用&命令後,作業被提交到後台運行,當前控制台兆陪沒有被佔用,但是一但把當前控制台關掉(退出帳戶時),作業就會停止運行。nohup命令可以在你退出帳戶之後繼續運行相應的進程。nohup就是不掛起的意思( no hang up)。該命令的一般形式為:
如果使用nohup命令提交作業,那麼在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件:
使用了nohup之後,很多人就這樣不管了,其實這樣有可能在當前賬戶非正常退出或者結束的時候,命令還是自己結束了。所以在使用nohup命令後台運行命令之後,需要使用exit正常退出當前賬戶,這樣才能保證命令一直在後台運行。
ctrl + z :可以將一個正在前台執行的命令放到後台,並且處於暫停狀態。
Ctrl+c :終止前台命令。
jobs: 查看當前有多少在後台運行的命令。 jobs -l選項可顯示所有任務的PID,jobs的狀態可以是running, stopped, Terminated。但是如果任務被終止了(kill),shell 從當前的shell環境已知的列表中刪除任務的進程標識。
2>&1解析:
擴展鏈接:如何寫高效的代碼,和代碼優化方法
5. linux的nohup進程怎麼停
因為進程就是在你打開的終端里執行的,退出終端就會退出所有在這個終端打開的進程. 比如,你在終端打開了vi 當你退出的時候,你的vi是不是也退出了.
6. linux伺服器注銷界面會終止程序
linux伺服器注銷界面會終止程序如下
這時候談指我們可以使用後台守護線程來解決這個問題。
nohupjava-jarword.jar&nohup:不掛斷的運行。即使鬧或你掛斷了ssh連接,程序照樣運行。
&:在後台運行。按ctrl+c後推出程序運行界面,程序會在後台運行。
這樣線程就啟動了。
我們輸入命令查看下進程是否在運行
ps-ef|grepjavaps:將程序某個時間的運行狀況截液侍伍取下來
grep:查找命令
此處已成功運行。大功告成
7. linux下nohup 命令怎麼kill
Unix中 nohup 命令功能就是不掛斷地運行命令,同時 nohup 把程序的所有輸出到放到當前目錄 nohup.out 文件中,如果文件不可寫,則放到 <用戶主目錄>/nohup.out 文件中。那麼有了這個命令以後我們php就寫成shell 腳本使用循環來讓我們腳本一直運行下去,不管我們終端窗口是否關閉都能夠讓我們php 腳本一直運行下去。 馬上動手寫個 PHP 小程序,功能為每30秒記錄時間,寫入到文件 復制代碼 代碼如下: # vi for_ever.php #! /usr/local/php/bin/php define('ROOT', dirname(__FILE__).'/'); set_time_limit(0); while (true) { file_put_contents(ROOT.'for_ever.txt', date('Y-m-d H:i:s')."\n", FILE_APPEND); echo date('Y-m-d H:i:s'), ' OK!'; sleep(30); } ?> 保存退出,然後賦予 for_ever.php 文件可執行許可權: # chmod +x for_ever.php 讓它在再後台執行: # nohup /home/andy/for_ever.php.php & 記得最後加上 & 符號,這樣才能夠跑到後台去運行 執行上述命令後出現如下提示: [1] 5157 nohup: appending output to 'nohup.out' 所有命令執行輸出信息都會放到 nohup.out 文件中 這時你可以打開 for_ever.php 同目錄下的 for_ever.txt 和 nohup.out 看看效果! 好了,它會永遠運行下去了,怎麼結束它呢? # ps PID TTY TIME CMD 4247 pts/1 00:00:00 bash 5157 pts/1 00:00:00 for_ever.php 5265 pts/1 00:00:00 ps # kill -9 5157 找到進程號 5157 殺之,你將看到 [1]+ Killed nohup /home/andy/for_ever.php OK! ==================== 在很多項目中,或許有很多類似的後端腳本需要通過crontab定時執行。比如每10秒檢查一下用戶狀態。腳本如下: @file: /php_scripts/scan_userstatus.php 復制代碼 代碼如下: #!/usr/bin/env php -q $status = has_goaway(); if ($status) { //done } ?> 通過crontab定時執行腳本scan_userstatus.php #echo 「*:*/10 * * * * /php_scripts/scan_userstatus.php」 這樣,每隔10秒鍾,就會執行該腳本。 我們發現,在短時間內,該腳本的內存資源還沒有釋放完,又啟用了新的腳本。也就是說:新腳本啟動了,舊腳本佔用的資源還沒有如願釋放。如此,日積月累,浪費了很多內存資源。我們對這個腳本進行了一下改進,改進後如下: @file: /php_scripts/scan_userstatus.php 復制代碼 代碼如下: #/usr/bin/env php -q while (1) { $status = has_goaway(); if ($status) { //done } usleep(10000000); } ?> 這樣,不需要crontab了。可以通過以下命令執行腳本,達到相同的功能效果 #chmod +x /php_scripts/scan_userstatus.php #nohup /php_scripts/scan_userstatus.php & 在這里,我們通過&將腳本放到後台運行,為了防止隨著終端會話窗口關閉進程被殺,我們使用了nohup命令。那麼有沒有辦法,不使nohup命令,也能夠運行呢,就像Unin/Linux Daemon一樣。接下來,就是我們要講的守護進程函數。 什麼是守護進程?一個守護進程通常補認為是一個不對終端進行控制的後台任務。它有三個很顯著的特徵:在後台運行,與啟動他的進程脫離,無須控制終端。常用的實現方式是fork() -> setsid() -> fork() 詳細如下: @file: /php_scripts/scan_userstatus.php 復制代碼 代碼如下: #/usr/bin/env php -q daemonize(); while (1) { $status = has_goaway(); if ($status) { //done } usleep(10000000); } function daemonize() { $pid = pcntl_fork(); if ($pid === -1 ) { return FALSE; } else if ($pid) { usleep(500); exit(); //exit parent } chdir("/"); umask(0); $sid = posix_setsid(); if (!$sid) { return FALSE; } $pid = pcntl_fork(); if ($pid === -1) { return FALSE; } else if ($pid) { usleep(500); exit(0); } if (defined('STDIN')) { fclose(STDIN); } if (defined('STDOUT')){ fclose(STDOUT); } if (defined('STDERR')) { fclose(STDERR); } } ?> 實現了守護進程函數以後,則可以建立一個常駐進程,所以只需要執行一次: #/php_scripts/scan_userstatus.php 這里較為關鍵的二個php函數是pcntl_fork()和posix_setsid()。fork()一個進程,則表示創建了一個運行進程的副本,副本被認為是子進程,而原始進程被認為是父進程。當fork()運行之後,則可以脫離啟動他的進程與終端控制等,也意味著父進程可以自由退出。 pcntl_fork()返回值,-1表示執行失敗,0表示在子進程中,而返進程ID號,則表示在父進程中。在這里,退出父進程。setsid(),它首先使新進程成為一個新會話的「領導者」,最後使該進程不再控制終端,這也是成為守護進程最關鍵的一步,這意味著,不會隨著終端關閉而強制退出進程。對於一個不會被中斷的常駐進程來說,這是很關鍵的一步。進行最後一次fork(),這一步不是必須的,但通常都這么做,它最大的意義是防止獲得控制終端。(在直接打開一個終端設備,而且沒有使用O_NOCTTY標志的情況下, 會獲得控制終端). 其它事項說明: 1) chdir() 將守護進程放到總是存在的目錄中,另外一個好處是,你的常駐進程不會限制你umount一個文件系統。 2)umask() 設置文件模式,創建掩碼到最大的允許限度。如果一個守護進程需要創建具有可讀,可寫許可權的文件,一個被繼承的具有更嚴格許可權的掩碼會有反作用。 3)fclose(STDIN), fclose(STDOUT), fclose(STDERR) 關閉標准I/O流。注意,如果有輸出(echo),則守護進程會失敗。所以通常將STDIN, STDOUT, STDERR重定向某個指定文件.
8. Linux系統不停止服務,清空nohup.out文件
用途:LINUX命令用法,不掛斷地運行命令。
語法:nohup Command [ Arg … ] [& ]
描述:nohup 命令運行由 Command 參數和任何相關的 Arg 參數指定的命令,忽略所有掛斷(SIGHUP)信號。在注銷後使用 nohup 命令運行後台中的程序。要運行後台中的 nohup 命令,添加 & ( 表示「and」的符號)到命令的尾部。
例子: nohup ./startWeblogic.sh & 意思是即使退出ssh界面,命令仍然在後台執行,並且列印過程日誌到nohup.out,當然也可以將nohup.out的輸出轉向到其他文件,高級應用請參考擴展閱讀。
如上文所述出現了超大號的文件簡直是令人討厭的事情,而且nohup.out會一直一直自己增長下去,如果你的伺服器硬碟不給力的話,很容易把應用也掛掉(硬碟沒空間 ,啥都玩不轉),但是又不能一味的直接刪。因為直接刪除,可能會造成應用無法列印後續的錯誤日誌,該問題常見於weblogic伺服器,jboss伺服器等這些大型中間件,這個在生產環境上要尤為注意。
可以使用以下兩種方法實現: 不停止WEB服務就可以清空nohup.out的命令 。
不用擔心網上所說的性能問題,通常2/3 個G的文件都是1-2秒執行完畢
以下是定義日誌列印級別,除了高於級別2的告警信息記錄到log文件外,其餘直接不記錄
可以用來指定需要重定向的標准輸入或輸出。例如,將某個程序的錯誤信息輸出到log文件中:./program 2>log。這樣標准輸出還是在屏幕上,但是錯誤信息會輸出到log文件中。另外,也可以實現0,1,2之間的重定向。2>&1:將錯誤信息重定向到標准輸出。
Linux下還有一個特殊的文件/dev/null,它就像一個無底洞,所有重定向到它的信息都會消失得無影無蹤。這一點非常有用,當我們不需要回顯程序的所有信息時,就可以將輸出重定向到/dev/null。
9. 用xshell遠程連接linux伺服器,怎樣才能不讓服務停掉
用xshell遠程連接linux伺服器,用nohup命令來執行,才能不讓服務停掉。
如:nohup test.sh &
nohup 命令
用途:不掛斷地運行命令。
10. 怎麼結束nohup運行的進程
用ps 查看進程號,例如 ps -ef|grep myapp
得到進程號後 kill 123
如果殺不掉 kill -9 123
另外還需要看看執行kill 的用戶對不對,試試用root用戶殺。如果還不行,看看進程狀態是不是已經是一個僵屍了,可能操作系統也有BUG的。不行就重啟了