Menggunakan pemula dengan berhenti contoh yang tidak diketahui

8

Saya baru saja mulai jadi saya menulis skrip yang sangat mendasar hanya untuk mencetak ke file log bernama: vm-service.confyang saya masukkan /etc/init:

description "Virtual Images"
author      "Me"

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


script
echo "DEBUG: `set`" >> /tmp/vm-service.log

end script


pre-stop script
    echo "DEBUG: `set`" >> /tmp/vm-service.log
end script

jika saya menjalankan sudo start vm-service, ini menghasilkan:

vm-service start/running, process 29034

Tetapi, ketika saya menjalankan sudo stop vm-service, itu menghasilkan:

stop: Unknown instance

Saya sudah mencoba menjalankan sudo initctl reload-configuration, tetapi saya masih mendapatkan kesalahan saat berhenti.

Saya telah melihat buku masak tapi saya mungkin kehilangan sesuatu yang jelas.

adviner
sumber

Jawaban:

7

Pemula akan mempertimbangkan pekerjaan dihentikan jika proses utama (apa yang dijalankan jika skrip atau bait eksekutif ditentukan) keluar. Pemula kemudian akan menjalankan proses pasca-mulai.

Jadi apa yang terjadi adalah skrip pertama berjalan dan keluar, Pemula sedang mempertimbangkan pekerjaan berhenti, kemudian skrip kedua berjalan dan keluar. Jika Anda menjalankan perintah berhenti pada pekerjaan yang sudah berhenti, itu akan mencetak pesan yang Anda lihat.

Untuk mengatasinya, gunakan bait pre-start:

pre-start exec foo --bar

post-start exec baz --foo

jika Anda melakukan ini, Upstart akan melihat pekerjaan itu dimulai setelah bait pra-mulai selesai, dan tidak berhenti.

CameronNemo
sumber