GNU/Linux >> Belajar Linux >  >> Linux

systemd:SIGTERM segera setelah start

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

Linux
  1. Mulai gunakan systemd sebagai alat pemecahan masalah

  2. Ssh – Bagaimana Cara Menjalankan Script Segera Setelah Terhubung Melalui Ssh?

  3. Linux – Bagaimana Systemd Memulai Tanpa Default.target?

  1. Layanan Systemd Tidak Akan Memulai Nodejs?

  2. Systemd:Menggunakan After dan Requires

  3. systemctl menghentikan layanan Tomcat segera setelah dimulai

  1. Skrip mulai systemd postgresql

  2. Nonaktifkan layanan systemd setelah waktu idle

  3. PHP-FPM tidak dimulai secara otomatis setelah reboot