Biasanya tidak memposting di sini, tetapi saya mengacaukan yang ini.
Saya memiliki skrip Python yang bercabang saat diluncurkan, dan bertanggung jawab untuk memulai banyak proses lainnya. Skrip ini dulu diluncurkan saat startup melalui sysvinit
, tetapi baru-baru ini saya memutakhirkan ke Debian Jessie jadi telah mengadaptasinya untuk diluncurkan melalui systemd
.
Sayangnya, saya mengalami masalah yang tidak dapat saya selesaikan. Saat Anda meluncurkan skrip secara langsung di shell pengguna, skrip akan meluncurkan proses turunannya dengan benar, dan saat skrip keluar, proses turunan menjadi yatim piatu dan terus berjalan.
Saat diluncurkan Via systemd, jika proses induk keluar, semua anak juga keluar (Nah, screen
s bahwa mereka meluncurkan mati dan muncul sebagai Mati).
Idealnya saya harus dapat memulai ulang skrip induk tanpa mematikan semua proses anak, apakah ada sesuatu yang saya lewatkan?
Terima kasih!
[Unit]
Description=Server commander
After=network.target
[Service]
User=serveruser
Type=forking
PIDFile=/var/Server/Server.pid
ExecStart=/var/Server/Server.py
ExecStop=/bin/kill -s TERM $MAINPID
[Install]
WantedBy=multi-user.target
Sunting:
Mungkin relevan bagi saya untuk menunjukkan bahwa skrip Python pada dasarnya adalah 'pengontrol' untuk proses turunannya. Ini memulai dan menghentikan server di screen
GNU s seperti yang diminta dari server pusat. Biasanya selalu berjalan, tidak memunculkan layanan dan keluar.
Namun ada beberapa kasus di mana saya ingin dapat memuat ulang skrip tanpa mematikan proses anak, bahkan jika itu berarti prosesnya menjadi yatim piatu ke pid 1. Bahkan, tidak masalah jika skrip Python memulai proses sebagai proses induk, jika memungkinkan.
Penjelasan yang lebih baik tentang cara kerjanya:
systemd
memunculkanServer.py
Server.py
garpu dan menulis file pid untuksystemd
Server.py
kemudian memunculkan proses server di layar gnu berdasarkan instruksinyaServer.py
terus berjalan untuk melakukan restart yang diminta dari server
Saat meluncurkan tanpa systemd
, Server.py
dapat dimulai ulang dan screen
GNU diluncurkan tidak terpengaruh. Saat meluncurkan dengan systemd
, ketika Server.py
dimatikan, alih-alih proses layar tersebut menjadi yatim piatu ke pid 1, mereka terbunuh.
Jawaban yang Diterima:
Saya berhasil memperbaikinya hanya dengan mengatur KillMode
untuk process
bukannya control-group
(bawaan). Terima kasih semuanya!