Jawaban:
Jalankan nohup python bgservice.py &
untuk mendapatkan skrip untuk mengabaikan sinyal hangup dan terus berjalan. Output akan dimasukkan nohup.out
.
Idealnya, Anda akan menjalankan skrip Anda dengan sesuatu seperti supervise
sehingga dapat dimulai ulang jika (ketika) mati.
somecommand &
, pid like akan dicetak [1] 12345
. jika tidak, Anda dapat menggunakan $!
.
Jika Anda sudah memulai proses, dan tidak ingin mematikannya dan memulai ulang di bawah nohup, Anda dapat mengirimkannya ke latar belakang, lalu menyangkal.
Ctrl+Z
(menangguhkan proses)
bg
(mulai ulang proses di latar belakang
disown %1
(dengan asumsi ini adalah pekerjaan # 1, gunakan jobs
untuk menentukan)
Anda dapat mempertimbangkan untuk mengubah skrip python Anda menjadi daemon python yang benar, seperti yang dijelaskan di sini .
python-daemon adalah alat yang bagus yang dapat digunakan untuk menjalankan skrip python sebagai proses daemon latar belakang daripada skrip yang berjalan selamanya. Anda perlu sedikit memodifikasi kode yang ada tetapi sederhana dan sederhana.
Jika Anda menghadapi masalah dengan python-daemon, ada pengawas utilitas lain yang akan melakukan hal yang sama untuk Anda, tetapi dalam hal ini Anda tidak perlu menulis kode apa pun (atau memodifikasi yang ada) karena ini adalah solusi di luar kotak untuk daemonisasi proses.
Anda tidak dapat membatalkannya, tetapi saya lebih suka layar .
Berikut adalah solusi sederhana di dalam python menggunakan dekorator:
import os, time
def daemon(func):
def wrapper(*args, **kwargs):
if os.fork(): return
func(*args, **kwargs)
os._exit(os.EX_OK)
return wrapper
@daemon
def my_func(count=10):
for i in range(0,count):
print('parent pid: %d' % os.getppid())
time.sleep(1)
my_func(count=10)
#still in parent thread
time.sleep(2)
#after 2 seconds the function my_func lives on is own
Anda tentu saja dapat mengganti konten bgservice.py
file Anda di tempat my_func
.
The zsh shell memiliki opsi untuk membuat semua proses latar belakang berjalan dengan nohup.
Di ~/.zshrc
tambahkan baris:
setopt nocheckjobs #don't warn about bg processes on exit
setopt nohup #don't kill bg processes on exit
Kemudian Anda hanya perlu menjalankan proses seperti ini:, python bgservice.py &
dan Anda tidak perlu lagi menggunakan perintah nohup.
Saya tahu tidak banyak orang yang menggunakan zsh, tetapi ini adalah shell yang sangat keren yang akan saya rekomendasikan.
Jika yang Anda butuhkan adalah bahwa proses tersebut harus berjalan selamanya tidak peduli apakah Anda masuk atau tidak, pertimbangkan untuk menjalankan proses sebagai daemon.
supervisord adalah solusi luar biasa yang dapat digunakan untuk membuat daemon proses apa pun. Ini memiliki utilitas pengontrol lain supervisorctl
yang dapat digunakan untuk memantau proses yang sedang dijalankan oleh supervisor.
Anda tidak perlu menulis kode tambahan atau mengubah skrip yang ada agar ini berfungsi. Selain itu, dokumentasi verbose membuat proses ini lebih sederhana.
Setelah menggaruk-garuk kepala selama berjam-jam di sekitar python-daemon, supervisor adalah solusi yang bekerja untuk saya dalam beberapa menit.
Semoga ini bisa membantu seseorang yang mencoba membuat python-daemon berfungsi
Anda juga bisa menggunakan Yapdi :
Penggunaan dasar:
import yapdi daemon = yapdi.Daemon() retcode = daemon.daemonize() # This would run in daemon mode; output is not visible if retcode == yapdi.OPERATION_SUCCESSFUL: print('Hello Daemon')
Coba ini:
nohup python -u <your file name>.py >> <your log file>.log &
Anda dapat menjalankan perintah di atas di layar dan keluar dari layar.
Sekarang Anda dapat mengikuti log skrip python Anda dengan: tail -f <your log file>.log
Untuk mematikan skrip Anda, Anda dapat menggunakan perintah ps -aux dan kill .
nohup: ignoring in put and appending output to
nohup.out'` dan ketika saya menekan enter, proses keluar dengan status 1. Apa yang terjadi?