ホームページ > 記事 > ウェブフロントエンド > Python スクリプトをバックグラウンドで実行するいくつかの方法
python で書かれた監視スクリプト test1.py は、while True モードで実行されます。SSH リモート時 (putty ターミナルを使用)、次のコマンドを通じてスクリプトを開始します。
コードは次のとおりです。
python test1.py &
これで、スクリプトは正常に実行され、プロセス番号は ps を通じて確認できます。この時点で、ssh ターミナルは (ps を使用せずに) 直接閉じられます。 exit コマンドですが、putty を介して直接実行されました) ボタン が実行されました)、再度ログインした後、プロセスが 終了 したことがわかりました。
バックグラウンド起動により問題は解決しました。今後の参考のためにここにまとめておきます。
linux はバックグラウンドで実行されます
fork によって実装されます
Linux 環境では、c のデーモン プロセスは fork によって実装されます。 Python はこの方法でも実装できます。サンプル コードは次のとおりです。
コードは次のとおりです。
#!/usr/bin/env python import time,platform import os def funzioneDemo(): # 这是具体业务函数示例 fout = open('/tmp/demone.log', 'w') while True: fout.write(time.ctime()+'\n') fout.flush() time.sleep(2) fout.close() def createDaemon(): # fork进程 try: if os.fork() > 0: os._exit(0) except OSError, error: print 'fork #1 failed: %d (%s)' % (error.errno, error.strerror) os._exit(1) os.chdir('/') os.setsid() os.umask(0) try: pid = os.fork() if pid > 0: print 'Daemon PID %d' % pid os._exit(0) except OSError, error: print 'fork #2 failed: %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 if name == 'main': if platform.system() == "Linux": createDaemon() else: os._exit(0)
upstart メソッドを通じて実装されます
アプリケーションは upstart を通じてシステム サービスにカプセル化できます。完全な例はここに直接記録されています。
1. Python スクリプトを作成します
コードは次のとおりです。
[root@local t27] # cat test123.py #!/usr/bin/env python import os,time while True : print time.time() time.sleep(1)
2. upstat設定ファイル
コードは次のとおりです:
[root@local t27] # cat /etc/init/mikeTest.confdescription "My test"author "Mike_Zhang@live.com" start on runlevel [234]stop on runlevel [0156] chdir /test/t27exec /test/t27/test123.pyrespawn
3. upstate をリロードします
コードは次のとおりです:
initctl reload-configuration
4. サービスを開始します
コードは次のとおりです:
[root@local t27]# start mikeTest mikeTest start/running, process 6635 [root@local t27]# ps aux | grep test123.py root 6635 0.0 0.0 22448 3716 ? Ss 09:55 0:00 python /test/t27/test123.py root 6677 0.0 0.0 103212 752 pts/1 S+ 09:56 0:00 grep test123.py
5. サービスを停止します
コードは次のとおりです:
[root@local t27]# stop mikeTest mikeTest stop/waiting [root@local t27]# ps aux | grep test123.py root 6696 0.0 0.0 103212 752 pts/1 S+ 09:56 0:00 grep test123.py [root@local t27]#
達成bash スクリプトを介して
1、Python コード
コードは次のとおりです:
[root@local test]# cat test123.py#!/usr/bin/env python import os,time while True : print time.time() time.sleep(1)
2. 起動スクリプトを作成します
& を直接使用してプロセスを開始する場合:
[root@local test]# cat start.sh#! /bin/sh python test123.py &
コードは次のとおりです:
SSH ターミナルを直接閉じると、プロセスが終了します。
screen、tmux などを介して実行します。
[root@local test]#./start.sh
プログラムを一時的に実行したい場合は、screen、tmux からプログラムを開始できます。 tmux の起動方法の説明。
1. tmux を起動します
python test123.py &
ターミナルに tmux と入力して起動します
2. tmux でプログラムを起動します
次のコマンドを直接実行します (上記のスクリプトを参照)。 python test123.py3. SSH ターミナルを直接閉じます (putty の閉じるボタンなど)。 >
4. 再度 SSH を実行した後、次のコマンドを実行します。コードは次のとおりです。
Python プログラムがまだ存在していることがわかります。通常どおり実行します。
Windows でのバックグラウンドでの実行
Windows では詳しく調べていませんが、私がよく使う方法は、Python スクリプトの拡張子を " に変更することです。 .pyw」をダブルクリックします。コードを変更せずにバックグラウンドで実行できます。
上記は、バックグラウンドで Python スクリプトを実行するいくつかの方法の内容です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。