คำตอบ:
ดูเหมือนว่าคุณกำลังมองหาการทำงานให้อยู่แล้วในอูบุนตูกับพุ่งพรวด respawn
ฉันท์ในการกำหนดค่าที่จะทำสิ่งที่คุณต้องการ ฉันจะแนะนำกับการใช้วิธีการมาตรฐานน้อยกว่าในการจัดการกับเรื่องนี้
หากไม่มีรายละเอียดเพิ่มเติมเกี่ยวกับกระบวนการที่คุณพยายามจัดการกับมันยากที่จะพูดว่าการกำหนดค่าควรมีลักษณะอย่างไร มันขึ้นอยู่กับว่ามันจะยกและทำให้ตัวเองอยู่ในพื้นหลังเช่น เอกสารพุ่งพรวดบนrespawn
บาทควรให้ข้อมูลเพิ่มเติมแก่คุณ
น่าเสียดายที่ยังไม่สามารถเรียกใช้งานผู้ใช้ได้อย่างถูกต้อง: ไม่สามารถเริ่มต้นเพื่อเรียกใช้งานผู้ใช้ได้
สมมติว่าเราต้องการให้แอปเครื่องคิดเลขทำงานต่อไปแม้ว่าจะถูกฆ่าด้วยไฟ (สัญญาณ 9)
สร้างไฟล์การกำหนดค่าใน/etc/init/calculator.conf
(ตามบทความนี้ ):
#!upstart
description "Calculator"
# Start job via the daemon control script. Replace "gert" with your username.
exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
# Restart the process if it dies with a signal
# or exit code not given by the 'normal exit' stanza.
respawn
# Give up if restart occurs 10 times in 90 seconds.
respawn limit 10 90
เริ่มโดยการเรียกใช้
sudo start calculator
มันจะเปิดขึ้นบนจอแสดงผลปัจจุบันของคุณ ( :0
) และเพลิดเพลินกับความสุดยอดโดยการเห็นมันเริ่มต้นใหม่หลังจากปิด
ระบุ ID กระบวนการเช่นโดยทำps aux | grep calculator
:
gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
ฆ่ามันด้วยไฟ.
sudo kill -9 13695
ดูมันปรากฏขึ้นอีกครั้ง:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
โปรดทราบว่าสิ่งนี้จะมีความสวยงามยิ่งขึ้นเมื่อใช้แผนสำหรับแผน Ubuntu 13.04 พร้อมการสนับสนุนงานผู้ใช้ที่เหมาะสม
servicename.conf
start servicename
ฉันสงสัยว่าคุณได้เลือกชื่ออื่นแล้ว
เป็นเครื่องมือที่ง่ายมากที่สามารถบรรลุผลเช่นเดียวกันโดยไม่จำเป็นต้องกำหนดค่าimmortal
: https://immortal.run/
เพียงรันคำสั่งดังนี้:
immortal <cmd>
มันจะทำงานในพื้นหลังและรีสตาร์ทโดยอัตโนมัติหากออก
immortalctl
: ดูสถานะการทำงาน มีname
คอลัมน์ที่จะพิมพ์ที่นี่คุณสามารถใช้สิ่งนี้เพื่ออ้างถึงงานด้วยคำสั่งควบคุมอื่น ๆimmortalctl stop <name>
: หยุดการตรวจสอบงานด้วยชื่อที่กำหนด (มันจะไม่ถูกรีสตาร์ทโดยอัตโนมัติ แต่กระบวนการปัจจุบันจะดำเนินการต่อไป)immortalctl -k <name>
: ส่ง SIGKILL ไปยังกระบวนการปัจจุบันimmortalctl exit <name>
: หยุดการตรวจสอบงานด้วยชื่อที่กำหนดและลบออกจากรายการงานstdout
และstderr
ในเบื้องหน้าหรือไม่?
immortalctl -l out.log <cmd> && tail -f out.log
เพื่อให้ได้ผลเช่นเดียวกัน
หากคุณไม่ต้องการฟังก์ชันการทำงานของ daemon / service / background และเพียงต้องการทำในคอนโซลให้สร้างไฟล์ที่เรียกว่าautorestart.sh
:
#!/bin/bash
while [ 1 ]; do
some_command
done
จากนั้น./autorestart.sh
จะรีสตาร์ทโดยอัตโนมัติsome_command
หากออกหรือหยุดทำงาน CTRL-C แบ่งลูปและออกจากโปรแกรมอย่างหมดจด
ทดสอบบน Ubuntu 18.04
มีวิธีการที่ไม่มี "พุ่งพรวด" คำหลักคือ "inittab" :-) แม้ว่าโดยทั่วไปจะเป็นไฟล์ที่ไม่เปลี่ยนแปลงจากค่าเริ่มต้น แต่ก็สามารถใช้เพื่อให้ได้การ respawning ที่ต้องการบนเครื่อง SYSV
ps-watcher เป็นเครื่องมือที่เฝ้าดูกระบวนการที่กำลังทำงานอยู่และดำเนินการกับสถานการณ์ที่กำหนดไว้ มาติดตั้งกัน
apt-get install ps-watcher
ดูรายละเอียดด้านล่างของการเรียกใช้ HHVM พร้อมทางเลือกในการใช้ PHP-FPMซึ่งทำงานได้ดีสำหรับฉัน
กระบวนการเริ่มต้นและการตอบสนองถูกจัดการโดย "systemd" ตั้งแต่ Ubuntu 15.04 การแนะนำที่ดีสามารถพบได้ที่นี่
ตัวอย่างที่ช่วยให้คุณเริ่มต้นใช้งานได้ใน
https://www.devdungeon.com/content/creating-systemd-service-files
วิธีการนี้ใช้แทนสิ่งที่เก่ากว่าโดยอ้างอิงจาก / etc / inittab และ upstart