Pythonで書かれた監視スクリプトtest1.pyは、trueで常に実行されます。 SSHがリモートの場合(Puttyターミナルを使用)、次のコマンドでスクリプトを開始します。
コードコピーは次のとおりです。
python test1.py&
これで、スクリプトは正常に実行されており、PSを介してプロセス番号を確認できます。この時点で、SSH端子を直接閉じます(Exitコマンドを使用するのではなく、Puttyの密接なボタンを介して直接実行します)。再びログインした後、プロセスが終了したことがわかります。
問題は、バックグラウンドスタートアップ方法を通じて解決されました。これが概要です。将来私がそれをチェックするのに便利です。
Linuxの下でバックグラウンドで実行されます
フォークを介して実装
Linux環境では、Cのデーモンプロセスがフォークを介して実装され、Pythonもこの方法で実装できます。例コードは次のとおりです。
コードコピーは次のとおりです。
#!/usr/bin/env python
インポート時間、プラットフォーム
OSをインポートします
def funzionedemo():
#これは特定のビジネス機能の例です
fout = open( '/tmp/demone.log'、 'w')
本当です:
fout.write(time.ctime()+'/n')
fout.flush()
time.sleep(2)
fout.close()
def createdaemon():
#Forkプロセス
試す:
if os.fork()> 0:os._exit(0)
Oserrorを除き、エラー:
印刷 'フォーク#1失敗:%d(%s)'%(error.errno、error.strerror)
os._exit(1)
os.chdir( '/')
os.setsid()
os.umask(0)
試す:
pid = os.fork()
PID> 0の場合:
「デーモンpid%d」%pidを印刷します
os._exit(0)
Oserrorを除き、エラー:
印刷 'フォーク#2失敗:%d(%s)'%(error.errno、error.strerror)
os._exit(1)
#リダイレクト標準IO
sys.stdout.flush()
sys.stderr.flush()
si = file( "/dev/null"、 'r')
so = file( "/dev/null"、 'a+')
se = file( "/dev/null"、 'a+'、0)
os.dup2(si.fileno()、sys.stdin.fileno())
os.dup2(so.fileno()、sys.stdout.fileno())
os.dup2(se.fileno()、sys.stderr.fileno())
#子プロセスでコードを実行します
funzionedemo()#function demo
__name__ == '__main__'の場合:
platform.system()== "Linux"の場合:
createdaemon()
それ以外:
os._exit(0)
アップスタートを通じて実装
アプリケーションは、アップスタートを通じてシステムサービスにカプセル化でき、完全な例をここに直接記録します。
1。Pythonスクリプトを書きます
コードコピーは次のとおりです。
[root@local t27]#cat test123.py
#!/usr/bin/env python
OS、時間をインポートします
本当です:
print time.time()
time.sleep(1)
2。アップステート構成ファイルを書き込みます
コードコピーは次のとおりです。
[root@local t27] #cat /etc/init/miketest.conf
説明「私のテスト」
Runlevel [234]から始める
Runlevelで停止[0156]
chdir /test /t27
exec /test/t27/test123.py
リスポーン
3.アップステートをリロードします
コードコピーは次のとおりです。
initctl reload-configuration
4。サービスを開始します
コードコピーは次のとおりです。
[root@local t27] #miketestを開始します
Miketest Start/Running、プロセス6635
[root@local t27] #ps aux | grep test123.py
ルート6635 0.0 0.0 22448 3716? SS 09:55 0:00 python /test/t27/test123.py
ルート6677 0.0 0.0 103212 752 PTS/1 S+ 09:56 0:00 GREP TEST123.PY
5。サービスを停止します
コードコピーは次のとおりです。
[root@local t27] #miketestを停止します
Miketest Stop/waiting
[root@local t27] #ps aux | grep test123.py
ルート6696 0.0 0.0 103212 752 PTS/1 S+ 09:56 0:00 GREP TEST123.PY
[root@localt27]#
BASHスクリプトを通じて実装されています
1。Pythonコード
コードコピーは次のとおりです。
[root@local test]#cat test123.py
#!/usr/bin/env python
OS、時間をインポートします
本当です:
print time.time()
time.sleep(1)
2。起動スクリプトを書きます
コードコピーは次のとおりです。
[root@local test]#cat start.sh
#! /bin/sh
python test123.py&
3。プロセスを開始します
コードコピーは次のとおりです。
[root@local test]#。/start.sh
プロセスを直接使用して開始する場合:
コードコピーは次のとおりです。
python test123.py&
SSH端子を直接閉じると、プロセスが終了します。
画面、TMUX、その他のメソッドを介して実装されています
プログラムを一時的に実行すると、画面またはTMUXを介してプログラムを開始できます。 TMUXの開始方法の説明は次のとおりです。
1。TMUXを開始します
ターミナルにtmuxを入力して開始します
2。TMUXでプログラムを開始します
次のコマンドを直接実行するだけです(上記のスクリプトを参照):python test123.py
3。SSH端子を直接オフにします(Puttyの閉じるボタンなど)。
4。resshing後、次のコマンドを実行します。
コードコピーは次のとおりです。
tmux attach
Pythonプログラムがまだ正常に実行されていることがわかります。
Windowsの下のバックグラウンドで実行します
私はそれを窓で深く勉強していません。私がよく使用する方法は、Pythonスクリプトの拡張を「.pyw」に変更し、コードを変更せずにバックグラウンドで実行するためにダブルクリックすることです。