Saya menggunakan perintah berikut untuk menjalankan skrip python di latar belakang:
nohup ./cmd.py > cmd.log &
Tetapi tampaknya nohup tidak menulis apa pun ke file log. cmd.log dibuat tetapi selalu kosong. Dalam skrip python, saya menggunakan sys.stdout.write
alih-alih print
mencetak ke output standar. Apakah saya melakukan sesuatu yang salah?
nohup
yang Anda gunakan? Versi BSD menulis ke file yang disebutnohup.out
di direktori saat ini (atau$HOME/nohup.out
jika direktori saat ini tidak dapat ditulisi). Saya tidak melihat cara untuk mengubah nama file output ...Jawaban:
Sepertinya Anda perlu menyiram stdout secara berkala (mis
sys.stdout.flush()
.). Dalam pengujian saya, Python tidak secara otomatis melakukan ini bahkan denganprint
sampai program keluar.sumber
python -u
tidak berhasil;nohup
mungkin telah memperkenalkan bufferingnya sendiri.nohup
tidak buffer output danpython -u
berfungsi dengan baik. (hanya pembaruan untuk orang-orang)nohup
adalah utilitas POSIX mungkin ada implementasi yang berbeda pada platform yang berbeda. btw, python3 I / O tidak lagi berbasis C stdio tetapi memiliki perilaku buffering yang sama.Anda dapat menjalankan Python dengan
-u
flag untuk menghindari buffering output:sumber
Menggunakan
-u
dengannohup
bekerja untuk saya. Menggunakan-u
akan memaksastdout
,stderr
stream untuk tidak dibangun. Itu tidak akan mempengaruhi stdin. Semuanya akan disimpan dalam "file " nohup.out ". Seperti ini-Anda juga dapat menyimpannya di direktori Anda. Cara ini-
Anda juga bisa menggunakannya
PYTHONUNBUFFERED
. Jika Anda mengaturnya ke string yang tidak kosong, itu akan berfungsi sama seperti-u
opsi. Untuk menggunakan ini jalankan perintah di bawah ini sebelum menjalankan kode python.atau
PS- Saya akan menyarankan menggunakan alat-alat seperti cron-job untuk menjalankan hal-hal di latar belakang dan eksekusi yang dijadwalkan.
sumber
atau
https://docs.python.org/2/using/cmdline.html#cmdoption-u
sumber
Python 3.3 dan di atasnya memiliki argumen flush untuk dicetak dan ini adalah satu-satunya metode yang bekerja untuk saya.
sumber
Saya memiliki masalah serupa, tetapi tidak terhubung dengan proses Python. Saya menjalankan skrip yang melakukan nohup dan skrip berjalan secara berkala melalui cron.
Saya dapat menyelesaikan masalah dengan:
PS: skrip saya ditulis dalam ksh yang berjalan di RHEL
sumber