Skrip pemula dan start-stop-daemon

8

Saya memiliki masalah ketika membuat skrip pemula akan memanggil skrip beberapa kali, menyebabkan IRCd saya muncul sekitar 8 kali atau lebih. Untuk memperbaiki ini, saya menggunakan start-stop-daemon:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn

nice -5

exec start-stop-daemon --start --chuid ircuser --chdir /home/ircuser/inspircd/run --exec /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf

Ini berfungsi persis seperti yang saya inginkan, KECUALI bahwa:

stop ircd

mengatakan bahwa itu menghentikannya, tetapi inspircd masih berjalan setelahnya.

Apakah ada cara yang lebih baik daripada menggunakan start-stop-daemon yang akan menghentikan skrip dari membuka 8 instance, atau adakah cara agar saya dapat membuatnya kompatibel dengan start-stop-daemon?

Liam Dawson
sumber

Jawaban:

6

Saya tidak bisa sepenuhnya yakin tetapi inspircd mungkin sedang mencari jalan ketika dijalankan sehingga Upstart tidak tahu di mana PID-nya sebenarnya. Jika demikian, ini dapat diperbaiki karena Pemula memiliki dua bait untuk menangani proses forking:

  • expect fork menangkap proses yang bercabang sekali (imo, kemungkinan besar terjadi di sini).
  • expect daemonmenangkap hal-hal yang membayar dua kali ... Yang ini mungkin dilakukan.

Jadi coba ini:

description "IRC Daemon Upstart Script"

start on startup
start on runlevel [2345]
stop on runlevel [016]

respawn
expect fork

nice -5

exec su bash -c "cd /home/ircuser/inspircd/run; /home/ircuser/inspircd/run/bin/inspircd -- --config=./conf/inspircd.conf" ircuser

Dan jika itu tidak berhasil, periksa supernyataan- saya untuk memastikan itu bekerja dari baris perintah dan kemudian berubah expect forkmenjadi expect daemondan memberikan pusaran lagi.


Mengedit bashbungkusnya mungkin lebih berbahaya daripada manfaatnya. Ini mungkin eksekutif yang lebih baik:

exec sudo -u ircuser /home/ircuser/inspircd/run/bin/inspircd -- --config=/home/ircuser/inspircd/run/conf/inspircd.conf
Oli
sumber
Terima kasih! Ini berfungsi lebih rapi, dan ya expect forkmemperbaiki masalah. Namun, saya masih tidak dapat memanggil 'stop ircd' dan skrip berhenti. Namun, saya akan mengelola tanpanya (ps aux, kill), tetapi jika Anda dapat mengubah jawaban Anda dengan menyertakan cara untuk melakukan itu, saya akan menjadi pengguna Ubuntu yang sangat senang;)
Liam Dawson
Hmm - ketika Anda menjalankannya sudo start ircdharus menampilkan PID. Jika Anda tetap pada akhir ps(misalnya:) ps u -p <PID>apakah itu menunjukkan proses yang masuk akal? Jika tidak, ini masih kehilangan jejak PID sehingga Anda mungkin ingin mencobaexpect daemon
Oli
Sebenarnya, itu tidak menghasilkan PID, hanya beberapa keluaran konsol. Oh well, ps aux, kill <pid>bekerja dengan baik, saya lebih khawatir tentang membuat script MULAI boot, yang tidak. Terima kasih!
Liam Dawson