Skrip pemula tidak dimulai

33

Ubuntu 10,04

Saya telah membuat skrip pemula ini ( /etc/init/pure-ftpd.conf ):

# pure-ftpd - FTP server

description "Pure-FTPd server"

start on filesystem
stop on runlevel S

respawn
respawn limit 10 5
pid file /var/run/pure-ftpd.pid
console output

pre-start script
    test -x /usr/local/sbin/pure-ftpd || { stop; exit 0; }
end script

exec /usr/local/sbin/pure-ftpd --maxclientsnumber 2 --maxclientsperip 10 --prohibitdotfileswrite --prohibitdotfilesread --noanonymous --chrooteveryone --dontresolve --nochmod --pidfile /var/run/pure-ftpd.pid

Tapi...

# start pure-ftpd
start: Unknown job: pure-ftpd

dan

# service pure-ftpd start
start: Unknown job: pure-ftpd


Apa masalahnya?
Apakah perlu melakukan sesuatu yang lebih?
Apakah perlu untuk membuat satu skrip di /etc/init.d juga?

Juan Simón
sumber
Saya bertemu masalah yang sama. Silakan coba perintah initctl di konsol. Untuk memasuki sesi konsol, tekan Ctrl + ALT + F1 dan login. (Saya tidak mengerti mengapa, tapi saya berhasil dengan cara ini)

Jawaban:

26

Biasanya berarti Anda memiliki kesalahan dalam .conffile - misalnya saya tidak yakin pidbait didukung pada 10,04, stoptidak dapat digunakan dalam skrip dll.

Saya akan mencoba memulai file dari awal (hanya dengan start, stopdll), dan kemudian perlahan-lahan membangunnya dengan menambahkan lebih banyak garis dan mengujinya melalui start pure-ftpd.

Sebagai contoh:

# cat pure-ftpd.conf 
start on filesystem
stop on runlevel S

respawn
respawn limit 10 5

# start pure-ftpd
pure-ftpd start/running

# cat pure-ftpd.conf 
start on filesystem
stop on runlevel S

respawn
respawn limit 10 5
pid file /var/run/pure-ftpd.pid

# start pure-ftpd
start: Unknown job: pure-ftpd
mengatur
sumber
Informasi dalam wiki sangat ketinggalan jaman ( upstart.ubuntu.com/wiki ). Di sisi lain, versi pemula di Lucid adalah 0.6.5-8 dan file pid harus didukung: upstart.ubuntu.com/wiki/…
Juan Simón
1
AFAIK pidbait telah dihapus sejak versi 0.5.0 2008-08-12 "One of those deaf-mutes". Jangan gunakan itu.
atur
Ada yang tahu di mana dokumentasi yang diperbarui?
Juan Simón
46

Anda juga dapat menjalankan init-checkconfuntuk memeriksa sintaksis

init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok
Stefano Gargiulo
sumber
1
Perintah tidak ada di 10,04, tetapi ada di 12,04.
Mark Stosberg
6
Tapi itu tidak berfungsi pada server Ubuntu 12.04 tanpa kepala (belum). Lihat bugs.launchpad.net/upstart/+bug/881885
FvD
1
Menemukan masalah langsung! - Harus dibangun ke dalam startperintah sehingga memberi Anda pesan kesalahan yang lebih informatif ...
PADA
26

Pertama, Anda dapat memeriksa apakah pekerjaan Anda benar-benar dikenal sebagai pemula:

sudo initctl list | grep your_job_name

... di mana your_job_namenama skrip pemula Anda dikurangi .confekstensi.

Jika tidak ditemukan, Anda dapat mencoba memuat ulang konfigurasi dan kemudian memeriksa kembali:

sudo initctl reload-configuration

# re-check
sudo initctl list | grep your_job_name

Kemudian coba lagi untuk memulai pekerjaan Anda:

sudo start your_job_name

Jika Anda tidak masuk /var/log/daemon.logatau /var/log/syslogsebelumnya, Anda mungkin memiliki beberapa sekarang.

Mark Stosberg
sumber
1
Dan bagaimana jika ini menunjukkan bahwa pekerjaan tersebut tidak dikenal untuk memulai, meskipun sintaksnya benar dan berada di / etc / init?
FvD
1
Apakah Anda mencoba "sudo initctl reload-configuration" seperti yang disarankan? Apakah Anda memeriksa izin, log, dokumen?
Mark Stosberg
Saya lakukan, dan melakukannya lagi setelah membaca komentar Anda. Bahkan memastikan bahwa pengguna adalah pengguna sistem (useradd -r). Mungkin ada sesuatu yang salah - tidak terkait dengan pemula - jadi saya memposting masalah ke pengembang layanan yang saya coba untuk mulai (itu server mengkilap yang saya coba mulai saat boot).
FvD
1
Dan itu memang izin! meskipun semuanya tampak sangat bagus saat mendaftar dir, hanya setelah chmod 644 initctl mengambil skrip. Terima kasih lagi.
FvD
1
Ingat, nama_anda_Anda tanpa akhiran .conf file. Butuh waktu satu jam untuk mencari tahu.
Marcel
6

Referensi yang paling relevan untuk sintaks file pekerjaan akan tersedia ketika Anda menjalankan perintah:

man 5 init

di sistem Anda. Untuk Ubuntu 10,04, seperti yang Anda temukan di jawaban sebelumnya, sintaks file pid salah.

Setiap kali Anda mendapatkan kesalahan 'pekerjaan tidak dikenal "kembali, itu ide yang baik untuk memeriksa log (pra 11.04, /var/log/daemon.log, 11,04 dan lebih besar semuanya berjalan di / var / log / syslog)

Anda mungkin melihat kesalahan seperti ini:

init: /etc/init/test.conf:2: Unknown stanza
SpamapS
sumber
3

Lagi pula saya di sini karena saya memiliki masalah yang sama, tetapi sintaks saya 100% benar.

Setelah debugging saya menemukan masalah lain yang dapat menyebabkan kesalahan "Pekerjaan tidak dikenal" ini :

pemula menggunakan inotify untuk memantau perubahan file .conf dan menginstal pekerjaan secara otomatis, ini sangat keren (untuk ini Anda tidak perlu sesuatu seperti update.rc dengan pemula!) tetapi bisa tidak sempurna jika Anda (seperti saya dalam kasus itu) menggunakan beberapa program FTP / SCP GUI untuk mengunggah dan mengedit konfigurasi pada server jarak jauh, pekerjaan itu dapat dihapus secara diam-diam oleh pemula ketika Anda mengedit file dengan cara itu.

untuk memperbaikinya cukup lakukan itu (itu menyelamatkan saya)

touch /etc/init/*

itu akan menghasilkan acara yang tidak sah untuk menyegarkan semua peserta baru.

Stefano Gargiulo
sumber
2

Saya memiliki masalah yang sama di wadah Docker Ubuntu 14.04 saya. Ternyata, gambar Ubuntu 14.04 (jika bukan yang lain) untuk Docker tidak mendukung Upstart dengan cara yang sama seperti mesin virtual penuh.

Untuk menjawab pertanyaan ini, mengapa layanan tidak dimulai, itu karena initctl bukan program pemula yang sebenarnya: itu dipetakan ke / bin / true.

Untuk memverifikasi, jalankan yang berikut di wadah Docker Ubuntu 14.04 vs. Vagrant, dan vs. tetesan DigitalOcean

$ ls -al /sbin/initctl

Anda akan melihat initctl tidak sama di Docker vs yang lain.

Tautan yang dapat meningkatkan pemahaman Anda .. https://github.com/docker/docker/issues/1024

Johnathan J.
sumber
2
Berlari ke masalah yang sama dengan buruh pelabuhan: singkatnya dan untuk meringkas, buruh pelabuhan hanya menjalankan satu proses pada satu waktu sehingga tidak dapat menjalankan pemula dan sesuatu yang lain. Untuk memastikan me-restart layanan jika / ketika itu mati, saya akhirnya menggunakan pengawas. NB: Anda tidak boleh menjalankan banyak layanan dalam sebuah wadah: tujuan utama menggunakan wadah adalah untuk membangun layanan mikro, jadi buatlah potongan-potongan itu dalam wadah yang terpisah dan satukan bersama dengan Docker-Compose
MrE
1
Saya baru saja berlari ke artikel ini dan itu memberikan saran yang sangat baik tentang bagaimana untuk memisahkan masalah: blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-docker yang mungkin bahkan strategi yang lebih baik untuk digunakan daripada menggunakan supervisor
MrE