เหตุใดบริการพุ่งพรวดของฉันจึงไม่เริ่มทำงานในการบูตระบบ


37

จากคำถามนี้ฉันได้เขียนบริการธรรมดา ๆ ( /etc/init/pms.conf ) สำหรับกล่อง Ubuntu Server 11.04 ที่ไม่มีหัวของฉันดังนี้:

start on filesystem and net-device-up IFACE=eth0
stop on runlevel [016]
respawn

exec /home/administrator/pms-current/PMS.sh

ฉันสามารถเริ่ม (หรือหยุด) บริการนี้ได้ตามต้องการจากบรรทัดคำสั่ง:

service pms start

และฉันเห็นได้ว่ามันกำลังวิ่งอย่างแน่นอน

อย่างไรก็ตามเมื่อฉันบูตเครื่องครั้งแรกบริการของฉันจะไม่เริ่มทำงาน ถ้าฉัน SSH ลงในช่องและตรวจสอบสถานะบริการที่ฉันได้รับ:

$ service pms status
pms stop/waiting

คำถามของฉันคือทำไมสิ่งนี้เกิดขึ้น? เหตุใดบริการของฉันจึงไม่เริ่มต้นการบู๊ต

อัปเดต 1 : ไม่แน่ใจว่าบริการของฉันเริ่มต้นแล้วและกำลังจะตายหรือไม่เริ่มเลยฉันเพิ่มสิ่งต่อไปนี้ใน PMS.sh:

echo "STARTED" > $STARTLOG

นี้เห็นได้ชัดเพียงแค่ให้ฉันบางสิ่งบางอย่างที่จะมองหา ผมทดสอบนี้โดยเริ่มต้นให้บริการตัวเองและการตรวจสอบแล้วstart.log ฉันลบstart.logแล้วรีบูต มันไม่ได้อยู่ที่นั่นหลังจากรีสตาร์ทดังนั้นดูเหมือนว่าคนธรรมดาไม่เริ่มให้บริการของฉัน ฉันคิดว่ามันอาจจะตายในจุดก่อนหน้าในกระบวนการ แต่ดูเหมือนว่าไม่น่าจะให้ความเรียบง่ายของมันทั้งหมด

อัปเดต 2 : ฉันเพิ่งอัปเกรดเป็น 11.10 ซึ่งรวมถึงการอัปเกรดครั้งแรก แต่ปัญหานี้ยังคงเกิดขึ้น

UPDATE 3 : ขอเป็นฉันได้ booted --debugกับ การส่งออกของแมว/var/log/syslog | grep initเป็นเวลานานเกินไปที่จะเกิดขึ้นในคำถาม แต่คุณดูที่นี่

อัพเดท 4 : บันทึกเพิ่มเติมเวลานี้ความเชื่อมั่นพุ่งพรวดรวมอยู่ที่ด้านบน รอบ 1และรอบ 2


คุณแน่ใจหรือไม่ว่าสคริปต์ไม่ได้ถูกเรียกใช้งาน ข้อความหยุด / รอของ pms หมายความว่างานพุ่งพรวดถูกรันและคำสั่งทั้งหมดถูกยกเลิกตามปกติ
จัด

เพิ่มการส่งออกของcat /var/log/syslog | grep initหลังจากเปิดใช้งาน loggging บูตสำหรับพุ่งพรวดโดยใช้คำแนะนำที่พุ่งพรวดแก้จุดบกพร่อง
คีแรน Liedeman

@Anarci: โปรดดูอัปเดต 3 ในคำถามของฉัน
Kent Boogaart

ผู้ใช้ส่วนใหญ่จะไม่เปิดเผยที่อยู่อีเมลเช่นนั้น แต่ให้ลิงก์ไปยังไซต์ pastebin เช่นUbuntu pastebin
Ciaran Liedeman

@Anarci: เสร็จแล้ว - โปรดดูคำถามของฉัน
Kent Boogaart

คำตอบ:


19

ฉันขอแนะนำให้เพิ่มความละเอียดของงานเช่นโดยใช้รายการก่อนเริ่ม / หลังเริ่ม

pre-start script
  logger "pre-start for myprog"
end script

post-start script
  logger "post-start for myprog"
end script

# and for PMS itself:
script
  logger "just before executing PMS"
  exec /home/administrator/pms-current/PMS.sh
end script

ข้อมูลเพิ่มเติมที่http://upstart.ubuntu.com/cookbook/

ดูได้ที่http://upstart.ubuntu.com/wiki/Debugging


นี่กำลังทำสิ่งที่อยู่ในหัวของฉันฉันได้ลองทำสิ่งที่แตกต่างออกไปจากด้านหลังโพสต์ ทั้งหมดล้มเหลวด้วยข้อความที่คลุมเครือแตกต่างกันในบันทึก ความพยายามครั้งล่าสุดของฉันส่งผลให้เกิดกระบวนการเริ่มต้น: pms (1329) ยุติด้วยสถานะ 143ซึ่งไม่มีความหมายสำหรับฉัน ฉันเห็นได้ว่าPMS.shไม่ได้เริ่มต้นเพราะสิ่งแรกที่ทำคือเขียนลงในบันทึกของตัวเองและรายการบันทึกนั้นไม่มีอยู่ ฉันสามารถเห็นเอาต์พุตก่อนเริ่มต้นของฉันซึ่งบอกฉันว่ามีไฟล์เป้าหมายอยู่และสามารถใช้งานได้ ฉันจะเลือกสิ่งนี้อีกครั้งในวันพรุ่งนี้ แต่ถ้าคุณมีความคิดใด ๆ ฉันก็อยากฟังพวกเขา ขอบคุณ
Kent Boogaart

สวัสดี @KentBoogaart ฉันดูเหมือนจะมีปัญหาเดียวกันกับคุณ คุณพบวิธีแก้ปัญหาหรือไม่?
Daniele B

@KentBoogaart ฉันมีปัญหาเช่นเดียวกับคุณ? มีโชคกับคุณไหม?
Mevin Babu

14

สิ่งที่อาจเกิดขึ้นที่นี่คือ pms เริ่มต้นขึ้นก่อนที่อะแดปเตอร์เครือข่ายของคุณจะปรากฏขึ้นและอาจมาก่อนแม้กระทั่งอะแดปเตอร์ลูปแบ็ค สมมติว่าเรากำลังพูดถึง PS3 Media Server มันเป็นบริการเครือข่ายและอาจไม่ชอบการเริ่มต้นกับไม่มีอินเตอร์เฟส

ลองเปลี่ยนเกณฑ์เริ่มต้นของคุณเป็น:

start on filesystem and net-device-up IFACE!=lo

ความหมายเริ่มต้นหลังจากส่วนต่อประสานเครือข่าย "ของจริง" หมด อย่างไรก็ตามนั่นอาจไม่เหมาะถ้า eth0 เป็นอินเทอร์เฟซถัดไปขึ้น PMS จะเริ่มทำงาน แต่คุณต้องการให้ PMS ใช้ wlan0 อย่างนั้นจริง ๆ จะไม่ทำเช่นนั้น บริการจะเริ่มต้น แต่อาจไม่สามารถเลือกอินเทอร์เฟซที่คุณต้องการให้ฟังได้ สมมติว่าคุณรู้ว่าอินเทอร์เฟซที่คุณกำลังสตรีมและมันจะไม่เปลี่ยนแปลงฉันจะฮาร์ดโค้ดลงในงานเช่น:

start on filesystem and net-device-up IFACE=wlan0

บน Oneiric (11.10) คุณสามารถใช้เหตุการณ์static-network-upเพื่อรออุปกรณ์ที่กำหนดค่าแบบคงที่ทั้งหมด ไหนดีเพราะช่วยให้คุณสามารถเขียนงานที่ขึ้นอยู่กับเครือข่ายโดยไม่ต้องใช้อินเตอร์เฟซฮาร์ดโค้ด [หมายเหตุ: โดย "อุปกรณ์ที่กำหนดค่าแบบคงที่ทั้งหมด" ฉันหมายถึงใช้/etc/network/interfacesแทน NetworkManager ไม่ได้หมายถึงสแตติกในแง่ของสแตติก IP กับ DHCP]


สิ่งนี้ฟังดูเหมือนกลอุบาย แต่มันก็ไม่ได้ผล ฉันมีเพียงloและแต่ผมใช้ข้อเสนอแนะที่สองของคุณ:eth0 start on filesystem and net-device-up IFACE=eth0ยังไม่ไปหลังจากรีบูต ฉันเพิ่งสังเกตเห็นบางสิ่งในบันทึก PMS ที่อาจเป็นผู้นำ ฉันจะตรวจสอบและกลับมา ...
Kent Boogaart

มันน่าสนใจ สิ่งหนึ่งที่ฉันไม่ได้พูดถึงคือฉันลองใช้สคริปต์ต้นฉบับของคุณและใช้งานได้กับการบูตสำหรับเครื่องของฉัน ฉันอ้างว่าเป็นเพียงโชคของการจับฉลาก (เช่นในสภาพการแข่งขันของฉันรถดีชนะและในรถคันที่แย่ของคุณชนะ) ฉันไม่สามารถเห็นสิ่งที่อ้างอิงอื่น ๆ ที่เราหายไปที่นี่ แปลก.
Mark Russell

2
เนื่องจากคุณสามารถเริ่มต้นได้หลังจากบูทขึ้นมาเราจะต้องขาดการพึ่งพาบริการอื่น แฮ็คสกปรกหนึ่งตัวที่อาจทำงานได้ (แต่จะไม่ส่องเราเลย) คือการทิ้งsleep 10- หรือสูงกว่า - ใน "สคริปต์ก่อนเริ่มต้น" ก่อนที่จะดำเนินการเชลล์สคริปต์
Mark Russell

ขออภัยทำเครื่องหมาย - แต่เราอยู่ในหน้าเดียวกัน ฉันลองสิ่งที่หลับ 10 แล้วในสคริปต์ก่อนเริ่มต้น ไม่ไป. จากนั้นฉันพยายามลบ debug.log ทั้งหมดและรีบูต หลังจากบู๊ตฉันมีสถานะการบริการเหมือนกันและไม่มีไฟล์ debug.log ดังนั้นฉันจึงไม่มั่นใจว่า PMS จะทำงานจริง ๆ เลย มีวิธีง่ายๆในการวินิจฉัยสิ่งนี้หรือไม่? ถ้าฉันเปลี่ยน PMS.sh เพื่อคายผลลัพธ์บางอย่างมันจะไปไหน ฉันคิดว่าฉันสามารถนำไปยังไฟล์ของฉันเองได้เสมอ - อาจให้ภาพต่อไป
Kent Boogaart

ฉันเพิ่งปรับปรุงคำถามของฉันด้วยข้อมูลเพิ่มเติม
Kent Boogaart

3

จากการตรวจสอบ syslog ของคุณกระบวนการ pms เริ่มต้นโดยไม่มีข้อผิดพลาด แต่หลังจากนั้นไม่นานในขณะที่เป้าหมายถูกเปลี่ยนตั้งแต่ต้นจนจบหมายความว่ามันถูกฆ่า

นี่เป็นเรื่องแปลกเล็กน้อยเพราะคุณได้เพิ่มประโยค repsawn ดังนั้นควรพยายามเริ่มต้นใหม่อีกครั้งหลังจากหยุด แต่ไม่เคยทำ ดังนั้นฉันเดาว่าคุณจะลบประโยค respawn

ระหว่างการเริ่มบริการ pms และการหยุด 2 บริการเท่านั้นที่เริ่มต้น ufw และ network-interface (eth0) และ 1 เริ่มใช้ udev-fallback-graphics

ดูเหมือนว่าคุณกระบวนการ pms จะเริ่มต้นในแบบคู่ขนาน แต่น่าเสียดายที่เอกสารพุ่งพรวดเป็นบิตหมอกเล็ก ๆ น้อย ๆ เกี่ยวกับความแตกต่างระหว่างที่แน่นอนstart on ...วานิลลาและและstart on starting ...start on started ...

ลองเปลี่ยนบทเริ่มต้นของคุณเป็น

start on started networking

หรือเพียงแค่เกินไป

start on net-device-up IFACE=eth0

เอาต์พุตของบันทึกจะแปลกเล็กน้อยเนื่องจากเหตุการณ์อุปกรณ์ขึ้นมาในภายหลัง แต่ pms เริ่มต้นก่อน

สิ่งนี้ควรตรวจสอบให้แน่ใจว่ากระบวนการของคุณเริ่มต้นเมื่อการตั้งค่าเครือข่ายทั้งหมดเสร็จสิ้นเช่นงานไม่ได้เริ่มต้นเท่านั้น แต่เสร็จสิ้นแล้ว

อย่าไว้วางใจเอาต์พุตของล็อกอย่างสมบูรณ์ในช่วงต้นของเอาต์พุตการบันทึกกระบวนการบูตไปยังไฟล์ใด ๆ จะไม่ทำงาน ดูคำตอบในการแก้จุดบกพร่องพุ่งพรวด


3

จัดการเพื่อแก้ไขปัญหาที่คล้ายกันโดยใช้ start on runlevel แทน:

start on runlevel [2345]

3

ฉันมีปัญหาเดียวกันและในที่สุดฉันก็แก้ไขมันได้ง่ายๆด้วย:

start on runlevel [2345]

ไม่มีnet-device-upหรือstarted networkingอะไร

นี่เป็นสคริปต์ธรรมดาที่สมบูรณ์และทำงานได้อย่างสมบูรณ์แบบ:

# MyApp

description     "MyApp"
author          "me"

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

respawn

exec /usr/bin/myapp 2>> /var/logs/myapp.log

1

ฉันเจอchkconfigในระหว่างการฝึกอบรม RHCSA / CE ของฉัน:

sudo apt-get install chkconfig
sudo chkconfig pms on

คุณสามารถตรวจสอบมันเป็นหน้า Oneiric สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับความสามารถของมัน


1

ฉันพบวิธีแก้ไขปัญหานี้แล้ว แต่ไม่เข้าใจ ถ้าฉันย้าย PMS ออกมา/home/administratorและเข้า/bin/pmsกับรูทในฐานะเจ้าของมันก็ใช้ได้ดี

ถ้าฉันปล่อยไว้ภายใต้/home/administrator/แต่ให้แน่ใจว่ารูทเป็นเจ้าของแถบทุกอย่างของ/home/administrator/ไดเรกทอรีตัวเองมันก็ยังไม่ทำงาน

หากฉันตั้งผู้ดูแลระบบให้เป็นเจ้าของทุกสิ่งและเปลี่ยนส่วนที่เกี่ยวข้องของสคริปต์เป็น:

sudo su administrator -c '/home/administrator/pms-current/PMS.sh'

มันยังไม่ทำงาน

ฉันคิดว่าตอนนี้ฉันจะทำ/home/root/ไดเรกทอรีและย้ายทุกอย่างที่นั่นถึงแม้ว่าฉันอยากจะเข้าใจเรื่องนี้จริงๆ


ดังนั้นจึงchkconfigไม่ทำงานเช่นกัน? คุณพยายามให้ไดเรกทอรีPMS.shอยู่ในรูตหรือไม่? หากวิธีการแก้ปัญหาของคุณใช้งานได้เพียงไปที่หน้า Launchpad ของ Upstart และติดต่อ devs โดยตรง
Oxwivi

และถ้ามันเพียงพอที่จะย้าย.shแล้วปล่อยทุกอย่างไว้ที่นั่นแล้วแก้ไขสคริปต์ให้ชี้ไปที่ไดเรกทอรีนั้น (หรืออาจจะเปลี่ยนไดเรกทอรี?)
Oxwivi

ใช่ฉันพยายามสร้างไดเรกทอรี PMS ทั้งหมดที่เป็นของรูท สันนิษฐานว่ามันไม่ทำงานเพราะ / home / administrator / ไม่ได้เป็นเจ้าของโดย root
Kent Boogaart

มันไม่สมเหตุสมผลเลยฉันรันสคริปต์ในไดเรกทอรี / home ของฉันเป็นประจำผ่านทางธรรมดาโดยไม่มีปัญหาแปลก
จัดการ

แม้แต่คนแปลกหน้า: ฉันแค่ลองทุกอย่างภายใต้ / home / root / ซึ่งเห็นได้ชัดว่าเป็นของ root ใช้งานไม่ได้ ฉันย้ายทุกอย่างกลับไปที่ / bin / pms และทำงานได้อีกครั้ง ดังนั้นดูเหมือนว่าพยายามพุ่งพรวด PMS จากใต้ / บ้านไม่ทำงานในระบบของฉัน
Kent Boogaart

1

ฉันมีปัญหา "ไม่เริ่มต้น" ที่คล้ายกันเมื่อฉันรู้ว่าสคริปต์ของฉันขึ้นอยู่กับไฟล์ที่อยู่ในบ้านของฉันและบ้านไม่สามารถเข้าถึงได้เพราะถูกเข้ารหัสด้วยกลไกอูบุนตูมาตรฐาน (.Private)

start on local-filesystems เหตุการณ์ถูกปล่อยออกมา (อาจ) ก่อนที่กระบวนการถอดรหัสจะสิ้นสุดลง


1

โฮมไดเร็กทอรีของคุณบน NFS หรือไม่? บางครั้งรูทไม่สามารถเข้าถึง NFS

สำหรับบันทึกในการทดสอบเล็ก ๆ ของฉันตอนนี้ที่ 12.04:

  • start on started networkingและstart on network-interface-up INTERFACE=eth0 ไม่ทำงาน แต่

  • start on started network-interface INTERFACE=eth0 ทำ.

ขอบคุณhttp://os4.org/wiki/upstart.htmlสำหรับการชี้ให้เห็นว่าinitctl list มักจะ แสดงเครือข่ายงานที่หยุด


ลิงก์ที่อ้างอิงนั้นใช้งานไม่ได้
slm


0

คล้ายกับ @xuhcc ฉันมาที่นี่เพื่อค้นหาสาเหตุที่สคริปต์ Vagrant Upstart ของฉันไม่ทำงาน ต่อไปนี้ควรจะทำงาน:

เริ่มต้นกับคนจรจัดที่ติดตั้ง

แต่ไม่ได้อยู่ในงานสร้างบางอันเนื่องจากข้อผิดพลาดต่อไปนี้

https://github.com/mitchellh/vagrant/issues/6074

วิธีแก้ปัญหาที่ปรากฏในรายงานใช้งานได้ดีสำหรับฉัน:

$ cat /etc/init/workaround-vagrant-bug-6074.conf 
# workaround for https://github.com/mitchellh/vagrant/issues/6074
start on filesystem
task

env MOUNTPOINT=/vagrant

script
  until mountpoint -q $MOUNTPOINT; do sleep 1; done
  /sbin/initctl emit --no-wait vagrant-mounted MOUNTPOINT=$MOUNTPOINT
end script

ทำงานได้ดีสำหรับฉัน


0

มันใช้งานได้สำหรับฉัน (ฉันต้องการบริการเริ่มหลังจาก iface up):

start on started networking and net-device-up IFACE=wlan1 
stop on shutdown

respawn
respawn limit 10 10
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.