Jawaban:
Anda memiliki dua pilihan utama:
Jalankan perintah dengan nohup
. Ini akan memisahkannya dari sesi Anda dan membiarkannya terus berjalan setelah Anda memutuskan koneksi:
nohup pythonScript.py
Perhatikan bahwa stdout dari perintah akan ditambahkan ke file yang dipanggil nohup.out
kecuali Anda mengarahkan ulang ( nohup pythonScript.py > outfile
).
Gunakan seperti multiplexer layar tmux
. Ini akan memungkinkan Anda memutuskan sambungan dari mesin jarak jauh tetapi kemudian, lain kali Anda terhubung, jika Anda menjalankan tmux attach
lagi, Anda akan menemukan diri Anda dalam sesi yang persis sama. Perintah masih akan berjalan (itu akan terus berjalan ketika Anda logout) dan Anda akan dapat melihat stdout dan stderr seolah-olah Anda tidak akan pernah logout:
tmux
pythonScript.py
Setelah Anda meluncurkannya, tutup saja jendela Putty. Kemudian, hubungkan lagi keesokan harinya, jalankan tmux attach
lagi dan Anda kembali ke tempat Anda mulai.
disown
2.screen
byobu
, pembungkus tmux atau layar.
The screen
alat, tersedia untuk semua distro Linux, mendukung ini.
Untuk menginstalnya, jalankan apt-get install screen
distro Linux berbasis deb, atau
dnf install -y screen
atau yang yum install -y screen
berbasis RPM.
Menggunakan:
$ screen
Shell baru dimulai. Dalam shell ini, Anda dapat memulai skrip Python Anda. Kemudian Anda dapat menekan Ctrl+ Shift+ Alalu D. Ini akan melepaskan terminal Anda dari shell yang menjalankan skrip Anda. Selanjutnya, skrip masih berjalan di dalamnya.
Untuk melihat bagaimana skrip Anda berjalan, Anda dapat menelepon screen -r
. Ini akan memasang kembali terminal Anda ke shell dengan skrip Python yang Anda jalankan di latar belakang.
UPD: seperti yang disebutkan Fox, layar berfungsi buruk dengan systemd, tetapi kita dapat menggunakan systemd untuk memulai skrip, seperti yang mereka katakan dalam contoh resmi .
Misalnya, jika skrip Anda dimulai oleh /usr/bin/myPythonScript
, Anda dapat membuat file unit Systemd, seperti ini.
$ cat /etc/systemd/system/myPythonScript.service
[Unit]
Description=MyPythonScript
[Service]
ExecStart=/usr/bin/myPythonScript
[Install]
WantedBy=multi-user.target
Daripada, Anda dapat memulai skrip ini
# systemctl daemon-reload
# systemctl start myPythonScript
Jika Anda ingin membuat skrip ini dimulai secara otomatis pada awal sistem -
# systemctl enable myPythonScript
Kapan saja Anda dapat melihat bagaimana skrip Anda berjalan
# systemctl status myPythonScript
Iklan Anda dapat meninjau log skrip Anda
# journalctl -u myPythonScript -e
screen
tidak persis bermain dengan baik systemd
dalam konfigurasi default. Saya tidak tahu apakah Ubuntu menggunakan systemd
, tetapi perilaku dan solusinya mungkin layak disebutkan dalam jawaban Anda
Sebagian besar proses dapat tertipu dengan mengarahkan stdout, stderr, stdin (tidak semua deskriptor selalu diperlukan untuk mengarahkan ulang) dan menggunakan &
operator kontrol.
Lihat yang ping example.com 1>/dev/null &
melakukan pekerjaan.
Tentu saja, beberapa program lebih canggih dan membutuhkan solusi seperti yang disebutkan @terdon, tetapi ada baiknya untuk mengetahui dan menggunakan yang terbaik.
EDIT: seperti yang tertulis dalam jawaban ini membunuh systemd
proses saat logout. Beberapa versi systemd
proses kill pada logout secara default, yang lain tidak. Perilaku ini dapat diubah dengan memodifikasi /etc/systemd/logind.conf dengan mengatur opsi berikut. Seperti yang tertulis, ini juga dapat memecahkan beberapa masalah yang Anda miliki dengan solusi @ terdon.
dari man logind.conf
:
KillUserProcesses=
Membawa argumen boolean. Mengkonfigurasi apakah proses pengguna harus dibunuh saat pengguna keluar. Jika benar, unit lingkup yang sesuai dengan sesi dan semua proses di dalam lingkup itu akan diakhiri. Jika salah, ruang lingkup "ditinggalkan", lihat systemd.scope (5), dan proses tidak terbunuh. Standarnya adalah "ya", tetapi lihat opsi
KillOnlyUsers=
dan diKillExcludeUsers=
bawah.Selain proses sesi, proses pengguna dapat berjalan di bawah unit manajer pengguna pengguna @ .layanan. Bergantung pada pengaturan berlama-lama, ini memungkinkan pengguna untuk menjalankan proses terlepas dari sesi login mereka. Lihat deskripsi
enable-linger
dalamloginctl
(1).Perhatikan bahwa pengaturan
KillUserProcesses=yes
akan merusak alat-alat sepertiscreen
(1) dantmux
(1), kecuali mereka dipindahkan keluar dari ruang lingkup sesi. Lihat contoh disystemd-run
(1).
Baca jawaban yang terhubung untuk mencari tahu lebih lanjut.
isatty()
dan keluar jika tidak?"
nohup
.