สคริปต์พุ่งพรวดไม่เริ่มทำงาน


33

Ubuntu 10.04

ฉันได้สร้างสคริปต์ upstart นี้ ( /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

แต่...

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

และ

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


มีปัญหาอะไร?
จำเป็นต้องทำอะไรมากกว่านี้หรือไม่?
จำเป็นต้องสร้างหนึ่งสคริปต์ใน /etc/init.d ด้วยหรือไม่


ฉันพบปัญหาเดียวกัน โปรดลองคำสั่ง initctl ที่คอนโซล ในการเข้าสู่เซสชันของคอนโซลกด Ctrl + ALT + F1 และล็อกอิน (ฉันไม่เข้าใจว่าทำไม แต่ฉันประสบความสำเร็จในลักษณะนี้)

คำตอบ:


26

มันมักจะหมายความว่าคุณมีข้อผิดพลาดใน.confไฟล์ - เช่นฉันไม่แน่ใจว่าpidstanza ได้รับการสนับสนุนใน 10.04 stopไม่สามารถใช้ในสคริปต์ ฯลฯ

ผมจะลองเริ่มต้นไฟล์จากรอยขีดข่วน (มีเพียงstart, stopฯลฯ ) start pure-ftpdและแล้วค่อยๆสร้างขึ้นโดยการเพิ่มมากขึ้นและเส้นและการทดสอบผ่านทาง

ตัวอย่างเช่น:

# 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

ข้อมูลในวิกินั้นล้าสมัยมาก ( upstart.ubuntu.com/wiki ) ในอีกด้านหนึ่งไฟล์ upstart ใน Lucid คือ 0.6.5-8 และควรรองรับไฟล์ pid: upstart.ubuntu.com/wiki/
Juan Simón

1
AFAIK ฉันท์ได้ถูกลบออกตั้งแต่รุ่นpid 0.5.0 2008-08-12 "One of those deaf-mutes"อย่าใช้มัน
จัดให้

มีคนรู้ว่าเอกสารที่อัปเดตแล้วอยู่ที่ไหน
Juan Simón

46

คุณยังสามารถเรียกใช้init-checkconfเพื่อตรวจสอบไวยากรณ์

init-checkconf /etc/init/job.conf
File /etc/init/job.conf: syntax ok

1
คำสั่งไม่มีอยู่ใน 10.04 แต่มีอยู่ใน 12.04
Mark Stosberg

6
แต่มันไม่ทำงานบนเซิร์ฟเวอร์ Ubuntu 12.04 ที่ไม่มีหัว (แต่) ดูbugs.launchpad.net/upstart/+bug/881885
FvD

1
พบปัญหาทันที! - ควรสร้างไว้ในstartคำสั่งเพื่อให้ข้อความแจ้งข้อผิดพลาดเพิ่มเติมแก่คุณ ...
AT

26

ก่อนอื่นคุณสามารถตรวจสอบได้ว่างานของคุณเป็นที่รู้จักอย่างแพร่หลาย:

sudo initctl list | grep your_job_name

... ที่ your_job_nameชื่อของสคริปต์พุ่งพรวดของคุณอยู่ลบ.confส่วนขยาย

หากไม่พบคุณสามารถลองโหลดการกำหนดค่าใหม่แล้วตรวจสอบอีกครั้ง:

sudo initctl reload-configuration

# re-check
sudo initctl list | grep your_job_name

จากนั้นลองอีกครั้งเพื่อเริ่มงานของคุณ:

sudo start your_job_name

หากคุณไม่ได้เข้าสู่ระบบ/var/log/daemon.logหรือ/var/log/syslogก่อนหน้านี้คุณอาจมีตอนนี้


1
และจะเกิดอะไรขึ้นถ้าสิ่งนี้แสดงให้เห็นว่างานไม่เป็นที่รู้จักที่จะพุ่งพรวดแม้ว่าไวยากรณ์นั้นถูกต้องและมันอยู่ใน / etc / init?
FvD

1
คุณลอง "sudo initctl reload-configuration" ตามที่แนะนำหรือไม่ คุณตรวจสอบสิทธิ์บันทึกเอกสารหรือไม่
Mark Stosberg

ฉันทำและทำอีกครั้งหลังจากอ่านความคิดเห็นของคุณ ทำให้แน่ใจว่าผู้ใช้นั้นเป็นผู้ใช้ระบบ (useradd -r) บางทีอาจมีบางอย่างผิดปกติ - ไม่เกี่ยวข้องกับการพุ่งพรวด - ดังนั้นฉันโพสต์ปัญหาให้กับผู้พัฒนาบริการที่ฉันพยายามจะเริ่ม (มันเป็นเซิร์ฟเวอร์เงางามฉันพยายามเริ่มบูต)
FvD

1
และมันก็เป็นสิทธิ์หลังจากทั้งหมด! แม้ว่าทุกอย่างจะดูเพรียวเมื่อรายการ dir หลังจาก chmod 644 ได้เริ่มต้นรับสคริปต์ ขอบคุณอีกครั้ง.
FvD

1
โปรดจำไว้ว่า your_job_name จะไม่มีไฟล์. ลงท้ายลงท้ายด้วย. conf ใช้เวลาหนึ่งชั่วโมงในการค้นหา
Marcel

6

การอ้างอิงที่เกี่ยวข้องมากที่สุดสำหรับไวยากรณ์ไฟล์งานจะพร้อมใช้งานเมื่อคุณรันคำสั่ง:

man 5 init

ในระบบของคุณ สำหรับ Ubuntu 10.04 ดังที่คุณพบในคำตอบก่อนหน้าไวยากรณ์ไฟล์ pid ไม่ถูกต้อง

เมื่อใดก็ตามที่คุณได้รับข้อผิดพลาด 'งานที่ไม่รู้จัก "กลับมาเป็นความคิดที่ดีที่จะตรวจสอบบันทึก (ก่อน 11.04, /var/log/daemon.log, 11.04 และทุกอย่างยิ่งมากขึ้นใน / var / log / syslog)

คุณอาจเห็นข้อผิดพลาดเช่นนี้:

init: /etc/init/test.conf:2: Unknown stanza

3

อย่างไรก็ตามฉันมาที่นี่เพราะฉันมีปัญหาเดียวกัน แต่ไวยากรณ์ของฉันถูกต้อง 100%

หลังจากแก้จุดบกพร่องฉันพบปัญหาอื่นที่อาจทำให้เกิดข้อผิดพลาด"งานที่ไม่รู้จัก" นี้ :

upstartsใช้inotifyในการตรวจสอบการเปลี่ยนแปลงไฟล์. conf และงานติดตั้งอัตโนมัติมันเจ๋งมาก(สำหรับสิ่งนี้คุณไม่ต้องการอะไรเช่น update.rc ด้วย upstart!)แต่อาจจะไม่สมบูรณ์ถ้าคุณ (เช่นฉันในกรณีนั้น) ใช้ โปรแกรม FTP / SCP GUI บางตัวเพื่ออัปโหลดและแก้ไขการกำหนดค่าบนเซิร์ฟเวอร์ระยะไกลงานสามารถถอนการติดตั้งได้อย่างเงียบ ๆ โดยคนธรรมดาเมื่อคุณแก้ไขไฟล์ในลักษณะนั้น

เพื่อแก้ไขเพียงทำเช่นนั้น(ที่ช่วยฉัน)

touch /etc/init/*

มันจะสร้าง inotify เหตุการณ์เพื่อรีเฟรช confs พุ่งพรวดทั้งหมด


2

ฉันมีปัญหาเดียวกันใน Ubuntu 14.04 Docker container ของฉัน ตามที่ปรากฎภาพ Ubuntu 14.04 (หากไม่ใช่อื่น ๆ ) สำหรับ Docker ไม่รองรับการพุ่งพรวดในลักษณะเดียวกับที่เครื่องเสมือนเต็มจะทำ

เพื่อตอบคำถามนี้ทำไมบริการไม่เริ่มขึ้นเพราะ initctl ไม่ใช่โปรแกรมพุ่งพรวดจริง: มันถูกแมปกับ / bin / true

เพื่อตรวจสอบการทำงานต่อไปนี้บน Ubuntu 14.04 Docker container เทียบกับ Vagrant และ vs. DigitalOcean droplet

$ ls -al /sbin/initctl

คุณจะเห็นว่า initctl ไม่เหมือนกันใน Docker vs. คนอื่น ๆ

ลิงก์ที่อาจช่วยให้คุณเข้าใจยิ่งขึ้น .. https://github.com/docker/docker/issues/1024


2
พบปัญหาเดียวกันกับนักเทียบท่า: ในระยะสั้นและสรุปนักเทียบท่าจะเรียกใช้เพียงหนึ่งกระบวนการในแต่ละครั้งดังนั้นจึงไม่สามารถเรียกใช้พุ่งพรวดและอย่างอื่นได้ เพื่อให้แน่ใจว่าจะเริ่มบริการใหม่เมื่อ / เมื่อมันตายฉันลงเอยด้วยการใช้ supervisord PS: คุณไม่ควรใช้บริการหลายอย่างในภาชนะ: จุดทั้งหมดของการใช้ภาชนะคือการสร้างบริการขนาดเล็กดังนั้นสร้างชิ้นส่วนในภาชนะแยกต่างหากและนำมารวมกันกับ Docker-Compose
MrE

1
ฉันเพิ่งพบบทความนี้และให้คำแนะนำที่ดีมากเกี่ยวกับวิธีแยกข้อกังวล: blog.docker.com/2014/06/why-you-dont-need-to-run-sshd-in-dockerซึ่งน่าจะเป็นคู่ กลยุทธ์ที่ดีกว่าที่จะใช้กว่าใช้ผู้บังคับบัญชา
MrE
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.