導航:首頁 > 程序命令 > nohup命令運行python

nohup命令運行python

發布時間:2022-05-31 07:01:56

linux 系統中 nohup命令如何使用

linux的nohup命令的用法。

在應用Unix/Linux時,我們一般想讓某個程序在後台運行,於是我們將常會
用 & 在程序結尾來讓程序自動運行。比如我們要運行mysql在後台: /usr/local/mysql/bin/mysqld_safe
–user=mysql
&。可是有很多程序並不想mysqld一樣,這樣我們就需要nohup命令,怎樣使用nohup命令呢?這里講解nohup命令的一些用法。
nohup /root/start.sh &
在shell中回車後提示:
[~]$ appending output to nohup.out
原程序的的標准輸出被自動改向到當前目錄下的nohup.out文件,起到了log的作用。
但是有時候在這一步會有問題,當把終端關閉後,進程會自動被關閉,察看nohup.out可以看到在關閉終端瞬間服務自動關閉。
咨詢紅旗Linux工程師後,他也不得其解,在我的終端上執行後,他啟動的進程竟然在關閉終端後依然運行。
在第二遍給我演示時,我才發現我和他操作終端時的一個細節不同:他是在當shell中提示了nohup成功後還需要按終端上鍵盤任意鍵退回到
shell輸入命令窗口,然後通過在shell中輸入exit來退出終端;而我是每次在nohup執行成功後直接點關閉程序按鈕關閉終端.。所以這時候會
斷掉該命令所對應的session,導致nohup對應的進程被通知需要一起shutdown。
這個細節有人和我一樣沒注意到,所以在這兒記錄一下了。
附:nohup命令參考
nohup 命令
用途:不掛斷地運行命令。
語法:nohup Command [ Arg … ] [& ]
描述:nohup 命令運行由 Command 參數和任何相關的 Arg 參數指定的命令,忽略所有掛斷(SIGHUP)信號。在注銷後使用
nohup 命令運行後台中的程序。要運行後台中的 nohup 命令,添加 & ( 表示」and」的符號)到命令的尾部。
無論是否將 nohup 命令的輸出重定向到終端,輸出都將附加到當前目錄的 nohup.out 文件中。如果當前目錄的 nohup.out
文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。如果沒有文件能創建或打開以用於追加,那麼 Command
參數指定的命令不可調用。如果標准錯誤是一個終端,那麼把指定的命令寫給標准錯誤的所有輸出作為標准輸出重定向到相同的文件描述符。
退出狀態:該命令返回下列出口值:
126 可以查找但不能調用 Command 參數指定的命令。
127 nohup 命令發生錯誤或不能查找由 Command 參數指定的命令。
否則,nohup 命令的退出狀態是 Command 參數指定命令的退出狀態。
nohup命令及其輸出文件
nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。nohup就是不掛起的意思( n ohang up)。
該命令的一般形式為:nohup command &
使用nohup命令提交作業
如果使用nohup命令提交作業,那麼在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件:
nohup command > myout.file 2>&1 &
在上面的例子中,輸出被重定向到myout.file文件中。
使用 jobs 查看任務。
使用 fg %n關閉。

❷ 在虛擬主機中安裝了python程序,如何使它在伺服器上自動運行

nohup 和 screen 都可以解決:

nohup python script.py &

或者

screen python script.py

❸ 如何遠程登錄Linux機器並運行Python程序

新手對於沒有圖形界面的linux遠程登錄及其操作都充滿畏懼。這里介紹一個簡單的軟體。叫作BitViz。簡稱BV for short。

一、軟體安裝
這里使用Putty的一個client軟體叫作Bv SshClient. 你可以在putty的官網上找到其鏈接。

Bitvise Tunnelier

Tunnelier is an SSH and SFTP client for Windows. It is developed and supported professionally by Bitvise. Tunnelier is robust, easy to install, easy to use, and supports all features supported by PuTTY, as well as the following:

graphical SFTP file transfer; 圖形界面最喜歡
single-click Remote Desktop tunneling;
auto-reconnecting capability;
dynamic port forwarding through an integrated proxy;
an FTP-to-SFTP protocol bridge. 方便的上傳下載和刪除操作。
Tunnelier is free for personal use, as well as for indivial commercial use inside organizations. You can download Tunnelier here.
二、熟悉窗口
下面一個例子,是找到python軟體安裝位置的演示:
1. 首先,我進入到root

步驟一,進入root

2. 輸入/home

步驟二,進入home

3. 點擊其中子文件夾,即可找到,方便了。

步驟三,找到python文件夾

三、easy_install python library
Example Of python-setuptools Being Installed:
[root@server ~]# yum install python-setuptools

Yum Command To Install python-setuptools-devel:
[root@server ~]#yum install python-setuptools-devel

在linux 下: 使用方法非常簡單,在命令行輸入「easy_install 參數」即可。
這比我想像的要方便很多!在windows里,我要cmd-cd & easy_install flickrapi
在ssh的命令窗口,只需輸入 easy_install flickrapi

如下圖:

easy_install flickrapi

四、run python script as a background process in linux

So, you have a server to which you connect remotely, upload a python script and want to run it and logout from the server keeping the program running. If you frequently work with spiders, you surely want to do it. But how to do it? For example if your script's name is script.py, then the command is:

[root@server ~]# nohup python script.py &

And sometimes you may be interested to see the output is that being generated. Then you should view the nohup.out file! This command can be useful:

[root@server ~]# tail -f nohup.out

❹ nohup命令詳解是什麼

nohup 命令運行由 Command 參數和任何相關的 Arg 參數指定的命令,忽略所有掛斷(SIGHUP)信號。在注銷後使用 nohup 命令運行後台中的程序。要運行後台中的 nohup 命令,添加 & ( 表示「and」的符號)到命令的尾部。

如果不將 nohup 命令的輸出重定向,輸出將附加到當前目錄的 nohup.out 文件中。如果當前目錄的 nohup.out 文件不可寫,輸出重定向到 $HOME/nohup.out 文件中。

運用須知

如果沒有文件能創建或打開以用於追加,那麼 Command 參數指定的命令不可調用。如果標准錯誤是一個終端,那麼把指定的命令寫給標准錯誤的所有輸出作為標准輸出重定向到相同的文件描述符。

如果正在運行一個進程,而且覺得在退出賬戶時該進程還不會結束,那麼可以使用 nohup 命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。nohup 就是不掛斷的意思( no hang up)。

❺ nohup命令的用法

nohup命令的用法在應用Unix/linux時,我們一般想讓某個程序在後台運行,於是我們將常會用
&
在程序結尾來讓程序自動運行。比如我們要運行mysql在後台:
/usr/local/mysql/bin/mysqld_safe
–user=mysql
&。可是有很多程序並不想mysqld一樣,這樣我們就需要nohup命令,怎樣使用nohup命令呢?這里講解nohup命令的一些用法。nohup
/root/start.sh
&在shell中回車後提示:[~]$
appending
output
to
nohup.out原程序的的標准輸出被自動改向到當前目錄下的nohup.out文件,起到了log的作用。但是有時候在這一步會有問題,當把終端關閉後,進程會自動被關閉,察看nohup.out可以看到在關閉終端瞬間服務自動關閉。咨詢紅旗linux工程師後,他也不得其解,在我的終端上執行後,他啟動的進程竟然在關閉終端後依然運行。在第二遍給我演示時,我才發現我和他操作終端時的一個細節不同:他是在當shell中提示了nohup成功後還需要按終端上鍵盤任意鍵退回到shell輸入命令窗口,然後通過在shell中輸入exit來退出終端;而我是每次在nohup執行成功後直接點關閉程序按鈕關閉終端.。所以這時候會斷掉該命令所對應的session,導致nohup對應的進程被通知需要一起shutdown。這個細節有人和我一樣沒注意到,所以在這兒記錄一下了。附:nohup命令參考nohup
命令用途:不掛斷地運行命令。語法:nohup
Command
[
Arg
]
[&
]描述:nohup
命令運行由
Command
參數和任何相關的
Arg
參數指定的命令,忽略所有掛斷(SIGHUP)信號。在注銷後使用
nohup
命令運行後台中的程序。要運行後台中的
nohup
命令,添加
&

表示and的符號)到命令的尾部。無論是否將
nohup
命令的輸出重定向到終端,輸出都將附加到當前目錄的
nohup.out
文件中。如果當前目錄的
nohup.out
文件不可寫,輸出重定向到
$HOME/nohup.out
文件中。如果沒有文件能創建或打開以用於追加,那麼
Command
參數指定的命令不可調用。如果標准錯誤是一個終端,那麼把指定的命令寫給標准錯誤的所有輸出作為標准輸出重定向到相同的文件描述符。退出狀態:該命令返回下列出口值:126
可以查找但不能調用
Command
參數指定的命令。127
nohup
命令發生錯誤或不能查找由
Command
參數指定的命令。否則,nohup
命令的退出狀態是
Command
參數指定命令的退出狀態。nohup命令及其輸出文件nohup命令:如果你正在運行一個進程,而且你覺得在退出帳戶時該進程還不會結束,那麼可以使用nohup命令。該命令可以在你退出帳戶/關閉終端之後繼續運行相應的進程。nohup就是不掛起的意思(
n
ohang
up)。該命令的一般形式為:nohup
command
&使用nohup命令提交作業如果使用nohup命令提交作業,那麼在預設情況下該作業的所有輸出都被重定向到一個名為nohup.out的文件中,除非另外指定了輸出文件:nohup
command
>
myout.file
2>&1
&在上面的例子中,輸出被重定向到myout.file文件中。

❻ ubuntu python怎麼作為守護進程一直運行

測試程序
先寫一個測試程序,用於輸出日誌和列印到控制台。
#-*- coding: utf-8 -*-
import logging
import time
from logging.handlers import RotatingFileHandler

def func():
init_log()
while True:
print "output to the console"
logging.debug("output the debug log")
logging.info("output the info log")
time.sleep(3);

def init_log():
logging.getLogger().setLevel(logging.DEBUG)
console = logging.StreamHandler()
console.setLevel(logging.DEBUG)
formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
console.setFormatter(formatter)
logging.getLogger().addHandler(console)

# add log ratate
Rthandler = RotatingFileHandler("backend_run.log", maxBytes=10 * 1024 * 1024, backupCount=100,
encoding="gbk")
Rthandler.setLevel(logging.INFO)
# formatter = logging.Formatter('%(asctime)s %(filename)s[line:%(lineno)d] %(levelname)s %(message)s')
Rthandler.setFormatter(formatter)
logging.getLogger().addHandler(Rthandler)

if __name__ == '__main__':
func()

後台啟動Python腳本
可以使用下面的命令來啟動上面的腳本,讓Python在後台運行。
nohup python -u main.py > test.out 2>&1 &

來解釋一下這幾個命令的參數。這一段來自
其中 0、1、2分別代表如下含義:
0 – stdin (standard input)
1 – stdout (standard output)
2 – stderr (standard error)
nohup python -u main.py > test.out 2>&1 &
nohup+最後面的& 是讓命令在後台執行
>out.log 是將信息輸出到out.log日誌中
2>&1 是將標准錯誤信息轉變成標准輸出,這樣就可以將錯誤信息輸出到out.log 日誌裡面來。

運行命令後,會返回一個pid。像下面這樣:
[1] 9208

後續可以學習Hadoop它們,把pid存起來,到時候stop的時候就把它殺掉。
跟蹤輸出文件變化
為了驗證腳本可以在後台繼續運行,我們退出當前會話。然後重新連接一個Session,然後輸入下面的命令來跟蹤文件的輸出:
tail -f test.out

輸出內容如下:
output to the console
2017-03-21 20:15:02,632 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:02,632 main.py[line:12] INFO output the info log
output to the console
2017-03-21 20:15:05,635 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:05,636 main.py[line:12] INFO output the info log
output to the console
2017-03-21 20:15:08,637 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:08,638 main.py[line:12] INFO output the info log
output to the console
2017-03-21 20:15:11,640 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:11,642 main.py[line:12] INFO output the info log
output to the console
2017-03-21 20:15:14,647 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:14,647 main.py[line:12] INFO output the info log
output to the console
2017-03-21 20:15:17,653 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:17,654 main.py[line:12] INFO output the info log
output to the console
2017-03-21 20:15:20,655 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:20,656 main.py[line:12] INFO output the info log
output to the console
2017-03-21 20:15:23,661 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:23,661 main.py[line:12] INFO output the info log
output to the console
2017-03-21 20:15:26,665 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:26,666 main.py[line:12] INFO output the info log
output to the console
2017-03-21 20:15:29,670 main.py[line:11] DEBUG output the debug log
2017-03-21 20:15:29,671 main.py[line:12] INFO output the info log

說明我們的腳本確實在後台持續運行。
結束程序
可以直接通過之前的那個pid殺掉腳本,或者可以通過下面的命令查找pid。
ps -ef | grep python

輸出的內容如下:
root 1659 1 0 17:40 ? 00:00:00 /usr/bin/python /usr/lib/python2.6/site-packages/ambari_agent/AmbariAgent.py start
root 1921 1659 0 17:40 ? 00:00:48 /usr/bin/python /usr/lib/python2.6/site-packages/ambari_agent/main.py start
user 8866 8187 0 20:03 ? 00:00:06 /usr/bin/python3 /usr/bin/update-manager --no-update --no-focus-on-map
root 9208 8132 0 20:12 pts/16 00:00:00 python -u main.py
root 9358 8132 0 20:17 pts/16 00:00:00 grep --color=auto python

可以看到我們的pid是9208,調用kill殺掉就可以了。
kill -9 9208

編寫啟動及停止腳本
啟動腳本
#!/bin/sh

pid=`ps -ef|grep "python -u main.py"| grep -v "grep"|awk '{print $2}'`

if [ "$pid" != "" ]
then
echo "main.py already run, stop it first"
kill -9 ${pid}
fi

echo "starting now..."

nohup python -u main.py > test.out 2>&1 &

pid=`ps -ef|grep "python -u main.py"| grep -v "grep"|awk '{print $2}'`

echo ${pid} > pid.out
echo "main.py started at pid: "${pid}

停止腳本
#!/bin/sh

pid=`ps -ef|grep "python -u main.py"| grep -v "grep"|awk '{print $2}'`

if [ "$pid" != "" ]
then
kill -9 ${pid}
echo "stop main.py complete"
else
echo "main.py is not run, there's no need to stop it"
fi

稍後我會把實例代碼上傳到資料共享裡面。

❼ linux 怎麼一直運行python搜索腳本

有兩種方式:
1、直接使用python xxxx.py執行。其中python可以寫成python的絕對路徑。使用which python進行查詢。
2、在文件的頭部(第一行)寫上#!/usr/bin/python2.7,這個地方使用python的絕對路徑,就是上面用which python查詢來的結果。然後在外面就可以使用./xxx.py執行了。

因為在linux中,python啊shell這些程序都是普通的文本格式,都需要一種程序去解釋執行它。要麼調用的時候指定,要麼在文件頭指定。更多linux知識可以看下《linux就該這么學》

❽ 直接python程序運行沒有問題,nohup運行就出錯了,該怎麼解決

nohup 和 screen 都可以解決: nohup python script.py & 或者 screen python script.py

php 執行python腳本的時候 已經安裝python模塊能正常使用么

一般是環境變數問題,你的執行一個sh的set命令看看結果吧。
解決辦法,在sh文件裡面設置好環境變數再調用python腳本。

❿ 如何讓 Python 代碼常駐在伺服器進程中

一、nohup

nohup,即 no hangup,nohup 的用途就是讓提交的命令忽略 hangup 信號,從而使我們的進程避免中途被中斷。它可以讓 python 腳本和伺服器連接端的 session 分離,以達到退出後依舊執行:

$ chmod +x /your_path/yourscript.py # 先設置可執行許可權$ nohup python /your_path/yourscript.py# 切記退出的 Terminal 的時候,不要 ctrl+c 退出,而是直接關閉,不然 Nohup 就被你關閉了。

如何關閉這個一直執行的進程呢:

# 找到對應的進程 PID
$ ps -ef | grep python

# 返回內容如:
user 2430 1 0 Jul03 ? 00:00:01 /usr/bin/python -tt /usr/sbin/yum-updatesd

# kill 掉該進程即可:
$ kill -9 2430

PS:nohup 在伺服器重啟之後就失效了,所以並不完美。

二、將命令寫入 Linux 啟動腳本

Linux 在啟動的時候會執行 /etc/rc.local 裡面的腳本,所以只要在這里添加執行命令就可以:

$ vim /etc/rc.local

# 如果是 Centos 添加以下內容:
/your_path/python3.4 /your_path/yourscript.py

# 以上內容需要添加在 exit 命令前,而且由於在執行 rc.local 腳本時,PATH 環境變數未全部初始化,因此命令需要使用絕對路徑。

PS:這種方式的缺點是如果腳本掛了,那麼不會自動重新啟動。

三、使用 Supervisor 進程管理工具

詳見這篇文章:使用 Supervisor 管理伺服器後台進程,在伺服器重啟和腳本出錯後,可以完美重啟,推薦。

閱讀全文

與nohup命令運行python相關的資料

熱點內容
php512 瀏覽:566
手機文件夾應用推薦怎麼關 瀏覽:605
伺服器為什麼要分業務口和管理口 瀏覽:682
楊輝三角java演算法 瀏覽:55
cmd編譯錯誤找不到符號 瀏覽:695
linuxip機器名 瀏覽:487
伺服器喇叭和頻道喇叭有什麼區別 瀏覽:31
閑魚排名演算法如何計算 瀏覽:975
linuxtargz解壓命令 瀏覽:741
還完房貸後解壓手續銀行會代辦嗎 瀏覽:811
解壓烹飪樂高 瀏覽:675
元神的伺服器怎麼看 瀏覽:362
stc8單片機串口中斷 瀏覽:954
信號分析pdf 瀏覽:927
暴力刪除命令 瀏覽:803
qt如何編譯加快速度 瀏覽:903
php添加數據sql語句 瀏覽:717
免費的小說app有什麼 瀏覽:405
螺桿壓縮機進氣閥動畫 瀏覽:651
兩台伺服器如何做負載均衡 瀏覽:227