Saat start.sh selesai, systemd mematikan semua yang ada di cgroup yang sama dengan start.sh
Pilihan Anda adalah:
-
menyetel KillMode di bagian Unit untuk diproses (defaultnya adalah grup kontrol). Itu akan menyebabkan systemd hanya mematikan proses yang langsung dipecat.
-
untuk tidak membuat start.sh memulai sesuatu di latar belakang dan keluar tetapi untuk menjalankannya tepat di latar depan
Menurut saya, dalam situasi Anda, opsi 2 layak dan lebih mudah.
Sumber:https://unix.stackexchange.com/a/231201/45329
Meskipun mengubah KillMode
ke process
seperti di bawah ini akan berfungsi dalam situasi Anda, ini bukan solusi yang disarankan.
[Service]
KillMode=process
...
Masalah dengan KillMode
setel ke process
apakah itu systemd
kehilangan kendali atas semua anak dari proses yang dimulainya. Artinya, jika terjadi sesuatu dan salah satu proses Anda tidak mati karena alasan tertentu, proses tersebut akan terus berlanjut.
Solusi yang lebih baik dalam situasi Anda adalah membuat semua proses, simpan pid
mereka lalu tunggu mereka.
Perintah tunggu yang Anda gunakan dalam skrip shell Anda dapat bervariasi tergantung pada shell mana yang Anda gunakan (tautan yang saya usulkan adalah untuk bash). Membuat skrip shell menunggu semua turunan sama saja dengan memulai satu turunan, yang tidak terlepas, di latar depan.
Jadi kurang lebih seperti ini:
#!/bin/bash
# Start your various processes
process1 &
PROCESS1_PID=$!
process2 &
PROCESS2_PID=$!
process3 &
PROCESS3_PID=$!
# Wait on your processes
wait $PROCESS1_PID $PROCESS2_PID $PROCESS3_PID
# OR, if I'm correct, bash also allows you to wait on all children
# with just a plain wait like so:
wait
# reach here only after children 1, 2, and 3 died