當前位置:首頁 » 編程軟體 » nohup腳本

nohup腳本

發布時間: 2023-05-22 06:28:06

『壹』 jenkins上使用shell腳本nohup部署jar服務到remote伺服器

先貼一下,我的jenkins里最後核心配置

remove_jar.sh腳本:

start_jar.sh腳本內容:

remove_jar.sh 和 start_jar.sh 在jenkins伺服器上,需要將這兩個shell在0.0.0.0(不能暴露)的遠端去執行
沒錯,客官您一眼就看出來了派行,覺得簡單的不值一提吧,先別著急,對搜這個問題的滑歲小菜雞來說這裡面也是大有文章,聽我一一道來。

1、第一個問題:ps -ef|grep xxx.jar查到多餘的pid
現象:在0.0.0.0上行 ps -ef | grep alk-wxapi-test.jar | grep -v grep | awk '{print $2}' 只能查到一個pid,但是把這句話放到shell腳本里,在本地使用命令上遠端執行,就會找到3個pid,而且kill 時提示失敗的錯誤。
現在已經知道原因了,但是當時確實是個問題。
已經解決不方便復現了,因此就描述一下就行了。
原因:shell里的這個命令也是通過bash在遠程執行的,所以找到的別的 無關緊要 的pid其實是bash,因此在grep是除了排除grep本身( grep -v grep )外還要排除bash( grep -v bash )
最後命令是:

2、遠程執行腳本,裡面有nohup java -jar,發生錯誤: nohup: failed to run command 『java』: No such file or directory
這是因為nohup時java環境變數沒有讀到,處理方式就是在nohup執行前加入

3、其他思路

4、第二條說jdk的路徑因為每個服務企業都不一樣,所以需要手動傳改,這一點已經在腳本上做了修改,啟動腳本上信羨睜攜帶的第一個參數就是jdk的安裝路徑

這兩個也都是比較好的思路,以後肯定有機會體驗的,本篇到此。

ps -ef |grep -v 在shell sh 腳本中貌似無效?
linux下搭建zookeeper集群遇到的坑
nohup: cannot run command異常解決
Zookeeper not starting, nohup error

『貳』 SaltStack 解決執行 nohup 啟動腳本 hang 住不能退出的問題

saltstack 執行 cmd.run python 服務,會 hang 住。

但應用伺服器上的服務是啟動了。

使用 -l debug 參數啟用 saltstack debug 日誌,可以看到是因為 xx-xxxxx-service_start.sh 啟動腳本沒有返回執行結果給 saltstack,導致 saltstack 一直在等待返回結耐粗襲果。

查看 xx-xxxxx-service_start.sh 啟動腳本,可以知道 python 服務是直接 nohup python manage.py runserver 0.0.0.0:25074 & 啟動的,saltstack 無法正確處理這條命令。
原因是 nohup python manage.py runserver 0.0.0.0:25074 & 方式啟動, 還會生成一個 nohup.out 文件 ,啟動運行日誌都會持續輸凳禪出到此文件。導致的問題就是,命令還在運行中,沒有退出,所以沒有返回結果給 saltstack。

解決辦法:
方式一:
修改腳本,nohup 配合 >/dev/null 2>&1 使用,就可以解決。

方式二:
利用 uwsgi 或者其他 python web server(gunicorn 等) 或者 systemctl 來後昌兄台運行 python 服務,由這些服務返回結果給 saltstack。

『叄』 nohup執行python腳本看不到log

python的輸出有緩沖伏則畝,導致log並不能盯逗夠馬上看到輸出。

-u參數,使得python不啟用緩沖。

所以修改缺森命令即可:nohup python -u test.py > log &

nohup送入後台運行:

nohup python -u train_lanenet.py  >nohup 2>&1 &

# 使用第一張到第三張GPU卡

import os

os.environ["CUDA_VISIBLE_DEVICES"] = "1,2,3"

『肆』 Linux shell腳本 nohup問題求助

你不應該放在profile,每個用戶登錄都會運行一次的。你確定hosts文件在mali目錄下?不是mail?

另外你應該把這段代碼寫成腳本 在profile中以nohup 加後台的方式運行這個腳本。

比如 保存到/etc/init_kafka
然後在 profile中添加
nohup /etc/init_kafaka &

『伍』 nohup執行,腳本怎麼自

在腳本nohup設置每天開始拷貝日誌作為擾告前一天的日誌備份,然後把當前日誌清前襲空即可,代碼如下:crontab -e//增加:0 0 * * * cp /dirname/logfile.log /bakdir/慧李兄logfile.`date -d yesterday +%Y%m%d`.log; cat /dev/null > /dirname/logfile.log//每周日凌晨1:00打包、刪除文件:0 1 * * 0 cd /bakdir; find ./ +mtime 7 -exec tar cvf logfile.`date -d yesterday +%Y%U`.tar {} \; ;find ./ -mtime 91 -exec rm -f {} \;

『陸』 python nohup

後台運行

nohup指不斷地運行,是no hang up的縮寫,指不間斷,不掛斷。運行一個進程的時候,不想讓其在你退出賬號時關閉,即可用nohup。
nohup在不規定的情況下,所以輸出內容會到nohup.out中

0 表示stdin標准輸入,用戶鍵盤輸入的內容
1 表示stdout標准輸出,輸出到顯示屏的內容
2 表示stderr標准錯誤,報錯內容

2>&1是一個咐緩數整體,>左右不能有空格,即將錯誤內容重定向輸入到標准輸出中去。

&為後台運行
nohup python dev_run.py >> ./run.log 2>&1 &衡首, 以python環哪輪境不間斷的運行dev_run.py這個腳本,並且將腳本輸出的內容重定向輸入run.log中(>>意為追加,如果用>會讓其中的內容清空)

requirements 添加了PyMysql >= 1.0.2之後
使用escape_string報錯:ImportError: cannot import name 'escape_string' from 'pymysql'。

解決方法:

https://blog.csdn.net/weixin_42840933/article/details/85780125
https://www.linuxprobe.com/linux-nohup.html
https://www.jianshu.com/p/b77d934cc252
https://blog.csdn.net/coco56/article/details/107430933

『柒』 Lunix運行腳本、任務(sh、nohup、qsub)

產生日誌:

sh **.sh &> xx.log

不產生日誌:

sh **.sh > /dev/null 2>&1 &

nohup:no hang up 的縮寫,就是不掛斷的意思 。 

nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。 該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。 在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中。

使用許可權:所有使用者

語法格式

nohup Command [ Arg … ] [& ]

參數說明:

Command :要執行的命令。

Arg :一些參數,可以指定輸出文件。

& :讓命令在後台執行,終端退出後命令仍舊執行。

實例

以下命令在後台執行 root 目錄下的 runoob.sh 腳本:

nohup /root/runoob.sh &

在終端如果看到以下輸出說明運行成功:

appending output to nohup.out

這時我們打開 root 目錄 可以看到生成了 nohup.out 文件。

如果要停止運行,你需要使用以下命令查找到 nohup 運行腳本到 PID,然後使用 kill 命令來刪除:

ps -aux | grep "runoob.sh"

參數說明:

a  : 顯示所有程序

u  : 以用戶為主的格式來顯示

x  : 顯示所有程序,不區分終端機

另外也可以使用 ps -def | grep "runoob.sh" 命令來查找。

找到 PID 後,就可以使用 kill PID 來刪除。

kill -9  進程號PID

以下命令在後台執行 root 目錄下的 runoob.sh 腳本,並重定向輸入到 runoob.log 文件:

nohup /root/runoob.sh > runoob.log 2>&1 &

2>&1  解釋:將標准錯誤 2 重定向到標准輸出 &1 ,標准輸出 &1 再被重定向輸入到 runoob.log 文件中。

0 – stdin (standard input,標准輸入)

1 – stdout (standard output,標准輸出)

2 – stderr (standard error,標准錯誤輸出)

實時監測日誌輸出內容命令:tail

tail 命令是nohup命令的好搭檔。配合-f參數,可以實時監視向日誌文件增加的信息。

tail -f myout.log

tail -f 等同於–follow=descriptor,根據文件描述符進行追蹤,當文件改名或被刪除,追蹤停止

tail -F 等同於–follow=name --retry,根據文件名進行追蹤,並保持重試,即該文件被刪除或改名後,如果再次創建相同的文件名,會繼續追蹤

tailf 等同於tail -f -n 10,與tail -f不同的是,如果文件不增長,它不會去訪問磁碟文件,所以tailf特別適合那些便攜機上跟蹤日誌文件,因為它減少了磁碟訪問,可以省電。

監測程序是否在正常運行中:ps

ps命令也可以和nohup命令配合使用,用於顯示當前進程 (process) 的狀態。可以監視後台程序是否在正常運行中或者已經掛掉。

ps -ef|grep yourcommand           # -ef 參數顯示所有命令,連帶啟動時的命令行參數

qsub命令用來從登陸節點上向計算節點進行任務投遞。前提是在伺服器上有集群管理工具分配計算節點等。SGE(SGE, Sun Grid Engine)集群管理工具可以用來提交批處理作業,SGE支持單或多節點作業,它將用戶投遞的任務進行排隊,然後將任務交給能夠運行的結算節點執行,工作流程可以分為四步:接受用戶投放的任務;在任務運行以前,將任務放到一個存儲區域;發送任務到一個執行設備,並監控任務的運行;運行結束寫回結果並記錄運行日誌。

qsub [ options ] [ command | -- [ command_args ]]

1. -@ optionfile (contains all valid options)  就是把qsub命令的可選項組合成一定功能的語句,保存在一個文件中。  qsub -a optionfilename jobfilename  

2. -a date_time   設置作業什麼時候可以執行。   格式:CC YY MMDDHHMM.SS 如 201109272213.21   qsub -a 201109272213.21 ../simplejob

3. -A account_string  Identifies the account to which the resource consumption of the job should be charged   設置一個作業的賬戶名,便於統計該賬戶使用的資源等信息    qsub -A testaccountname jobname  

4. -ac 添加名/值對到作業上下文   -dc 刪除。。   -sc 設置(修改)。。   Contexts provide a way to dynamically attach and remove meta-     information to and from a job. The context variables are not     passed to the job's execution context in its environment     The outcome of the evaluation of all -ac, -dc, and -sc options     or corresponding values in qmon is passed to defined JSV     instances as parameter with the name -ac.  

5. -ar ar_id 分配已提交作業,作為它的一部分,給已存在預約。ar=advance reservation   qsub -ar 60 jobname   #ai_di = unsigned integer   

6.  -b y[es]|n[o]      Gives the user the possibility to indicate explicitly whether       command should be treated as binary or script.     

7. -binding 等待理解

8.  -c occasion_specifier(際符)  定義或者重定義作業是否要被檢查,if是,在什麼環境下。        n           no checkpoint is performed.               s           checkpoint when batch server is shut down.               m           checkpoint at minimum CPU interval.               x           checkpoint when job gets suspended.               <interval>  checkpoint in the specified time interval.   qsub -c n jobname

9. -C prefix_string 前綴字元串定義一個在作業命令中的指令     qsub -C "#$" ../simplejob   

10.  -ckpt ckpt_name 選擇檢查點環境來檢查一個作業,同時聲明這個作業是檢查點作業。      qsub -ckpt allanckpt ../simplejob    

11.  -clear 重置作業的所有元素為初始默認狀態    qsub -clear ../simplejob   

12.  -cwd =current working directory  從當前的目錄開始執行作業。如果有相應的配置文件的話,    這個命令將啟動網格引擎的路徑別名設備。    

13.  -dl date_time 設置作業在deadline之前執行完,格式為CC YYU MMDDHHMM.SS    qsub -dl 201101131159.01 ../simplejob

14.  -e [[hostname]:]path,...定義或重新定義作業的標准錯誤流使用的路徑 e=stderror

15.  -h | -h {u|s|o|n|U|O|S}... h=hold 暫停作業執行       'u' .........user hold.             `s'  denotes a system hold.               `o'  denotes a operator hold.               `n'  denotes no hold (requires manager privileges).               `U'  removes a user hold.               `S'  removes a system hold.               `O'  removes a operator hold.        qsub -h ../simplejob(qsub只能使用-h)

16.  -l resource=value,... l=launch 啟動滿足資源需求的作業    Launch the job in a Grid Engine queue meeting the given resource               request list.  In case of qalter the previous definition is               replaced by the specified one.    qsub -l s_core=5 ../simplejob

17.  -q wc_queue_list 定義或重定義可能用來執行作業的隊列,包括群聚隊列、隊列域、隊列實例。    qsub -q all.q ../simplejob

18.  -hard  表示該作業在安排執行之前,作業的資源需求必須滿足。    qsub -hard  ../simplejob

19.  -soft 表示該作業在安排執行之前,作業的資料需求可以有、但不必須有。    qsub -soft ../simplejob

20.  -help 獲取幫助    qsub -help

21.  -hold_jid   wc_job_listt 定義或重定義當前提交的作業對哪些作業有依賴,所依賴的作業使用通配符作業清單表示:wc_job_list    qsub -hold_jid 63926 ../simplejob

22.  -hold_jid_ad wc_job_list ad=array dependency list of the submitted job    定義或者重定義組作業依賴列表。    qsub -hold_jid_ad 1-1200

23.  -t n[-m[:s]]    指定組作業的數量,將指示器與作業關聯    qsub -t 1-1200 ../simplejob

24.  -i [[hostname]:]file,... 定義或重定義一個文件為作業的標准輸入流    qsub -i stdin job

25.  -j y[es]|n[o] 指定作業的標准錯誤流是否合並到標准輸出流,如果-j y 和-e都存在的話,SGE將忽略後者。    qsub -j y ../simplejob

qstat -f # 查看用戶任務

qstat -j jobId  # 按任務id查看

qstat -explain a|c|A|E -j jobID # 查看任務任務並給出解釋

qstat -u user  # 按用戶查看

qw: 表示等待狀態

hqw: 任務掛起等待中,待依賴的任務完成後執行

Eqw: 投遞任務出錯

r: 表示任務正在運行

s: 暫時掛起

dr: 節點掛了之後,刪除任務就會出現這個狀態,只有節點重啟之後,任務才會消失

qdel -j 1111  刪除任務號為1111的任務

qdel -u AAA  刪除AAA投遞的所有任務

歡迎大家交流心得~~~3QU!!!...........

---------------------------------------------------------------------------------------------------------I am a line !----------------------------------------------------------------------------------------------

熱點內容
為何編譯硬體驅動 發布:2025-07-18 05:15:02 瀏覽:488
android適配原理 發布:2025-07-18 05:11:59 瀏覽:549
網路存儲伺服器如何搭建 發布:2025-07-18 04:47:23 瀏覽:549
手機上玩電腦我的世界伺服器 發布:2025-07-18 04:11:59 瀏覽:599
騰訊和安卓哪個渠道好 發布:2025-07-18 04:07:49 瀏覽:829
ftp不支持中文 發布:2025-07-18 03:46:19 瀏覽:245
伺服器太水了什麼原因 發布:2025-07-18 03:44:31 瀏覽:955
安卓怎麼去除紅色塗鴉 發布:2025-07-18 03:39:30 瀏覽:608
sql三表關聯 發布:2025-07-18 03:31:40 瀏覽:267
攬勝英國賽車綠是哪個配置的 發布:2025-07-18 03:18:11 瀏覽:392