เรียกใช้แอปพลิเคชันสคริปต์ซ้ำเมื่อเกิดข้อผิดพลาดหรือไม่


18

ฉันมีแอพพลิเคชั่นบางตัวที่จำเป็นต้องใช้กับแล็ปท็อปของฉันตลอดเวลา

ฉันใช้ bash script เพื่อเริ่มแอปพลิเคชันเหล่านี้ ในสคริปต์ของฉันฉันมีลูปที่มีลักษณะคล้ายกับสิ่งนี้:

while true;
do
    xterm
done

นี่จะเรียกใช้แอปพลิเคชัน ( xtermในกรณีนี้) และหากแอปพลิเคชันขัดข้องลูปจะเริ่มต้นอีกครั้ง

นี่เป็นข้อเสียที่ไม่มีทางออก "สะอาด" จากลูปนี้ ดังนั้นแม้ว่าเจตนาของผู้ใช้คือการปิดxtermลูปจะเริ่มใหม่อีกครั้ง

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

คำตอบ:


30

ลองสิ่งนี้:

while true; do xterm && break; done

แอปพลิเคชันมีรหัสสถานะการออกเพื่อให้บางสิ่งบางอย่างออกไปได้ดีมันจะคืนค่าศูนย์ ... และถ้ามีบางอย่างผิดปกติมันจะส่งออกหมายเลขอื่น วิธีนี้ช่วยให้ผู้ใช้สามารถเชื่อมต่อและค้นหาปัญหาที่แน่นอน นี่คือสิ่งที่คำตอบอื่น ๆ กำลังทำอยู่

&&เพียงตรวจสอบว่าคำสั่งก่อนหน้านี้เป็นการออกจากสถานะเป็นศูนย์และหากเป็นเช่นนั้นให้แบ่งลูป หากเกิดข้อผิดพลาดมันจะขว้างสิ่งอื่นที่ไม่ใช่ 0 และส่วน&& ...คำสั่งจะไม่เปิด xtermมันจะเพียงแค่รอบวงกลับมาและวิ่ง


6
มันค่อนข้างหรูหรา
Oli

อืม .. วิธีอื่น ๆ เช่นกัน:while xterm; do true; done
muru

1
@muru: มันใช้งานได้สำหรับฉัน:while ! xterm; do :; done
Cyrus

1
@Cyrus Ah ใช่ !ลืม
muru

ฉันสร้างสัตว์ประหลาด ฉันจะฆ่ามันได้อย่างไร
Tony Ruth

6

ในwhileสภาพที่คุณสามารถทดสอบได้ว่าสถานะทางออกของxtermสำเร็จหรือไม่กับสิ่งนี้:

result=1
while [ $result -ne 0 ]; do
    xterm
    result=$?
done

$? ตัวแปรเก็บสถานะการออกของคำสั่งที่ดำเนินการครั้งสุดท้าย


0

ฉันจะแนะนำให้คุณใช้

จนกระทั่ง xterm; echo "โปรแกรมลงท้ายด้วยสถานะ $" ; เสร็จแล้ว

นี่จะเรียกใช้โปรแกรมของคุณอีกครั้งหากโปรแกรมไม่ทำงาน


0

ใช้ลองบังคับบัญชามันง่ายมากและง่ายต่อการเพิ่มโปรแกรมหรือสคริปต์เพื่อวิ่ง ในกรณีที่คุณต้องการน้อยที่สุดcommandและอาจexitcodesอยู่ในprogramx-sectionเพื่อกำหนดค่า

ค่าเริ่มต้นexitcodesคือ 0.2 ซึ่งหมายถึง:

supervisord จะรีสตาร์ทกระบวนการหากออกจากด้วยรหัสทางออกที่ไม่ได้กำหนดไว้ในรายการนี้

โดยทั่วไปเป็นสิ่งที่คุณต้องการ: เรียกใช้อีกครั้งหากสคริปต์ขัดข้องหรือไม่ทำอะไรเลยหากผู้ใช้ปิดอย่างถูกต้อง (หรือสคริปต์เสร็จสมบูรณ์)

ลองการกำหนดค่าที่ง่ายที่สุดก่อน:

[program:you_app_name]
command=/path/to/you/app

หากต้องการความยืดหยุ่นมากขึ้นโปรดดูเอกสารประกอบการกำหนดค่าไฟล์

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