เกิดปัญหาการหยุดชะงักเป็นครั้งคราวสำหรับฉัน ฉันจะเริ่มต้นใหม่โดยอัตโนมัติหลังจากที่เกิดข้อผิดพลาดได้อย่างไร
เกิดปัญหาการหยุดชะงักเป็นครั้งคราวสำหรับฉัน ฉันจะเริ่มต้นใหม่โดยอัตโนมัติหลังจากที่เกิดข้อผิดพลาดได้อย่างไร
คำตอบ:
ก่อนอื่นฉันไม่ได้ใช้ Docky แต่ฉันสมมติว่า Docky อยู่ใน $ PATH ของคุณ ถ้าไม่เช่นนั้นระบุเส้นทางแบบเต็มไปยังไบนารี
นี่คือการใช้ Bash ที่ยอดเยี่ยม:
เริ่มด้วยไฟล์เช่น (เป็นกลุ่มแทน gedit หากคุณต้องการ):
gedit ~/process_monitor.sh
พิมพ์ต่อไปนี้:
#!/bin/bash
if [[ -z "$1" ]];then
echo "ERROR: must specify program"
exit 1
fi
while (( 0 == 0 ));do
$@ &
pid=`jobs -l | awk '{print $2}'`
wait $pid
done
บันทึกไฟล์
ตั้งค่าการอนุญาต:
chmod a+x ~/process_monitor.sh
ตอนนี้คุณสามารถเรียกใช้โปรแกรมดังนี้:
~/process_monitor.sh docky
และจะเปิดใช้งานโปรแกรมหนึ่งครั้งและให้แน่ใจว่าได้เริ่มโปรแกรมใหม่หากคุณเลือกที่จะออกจากโปรแกรมหรือเลือกที่จะหยุดทำงาน
หากต้องการเพิ่มรายการในการเริ่มต้นระบบจึงเปิดโปรแกรมเมื่อคุณเข้าสู่ระบบและจะไม่หยุดจนกว่าคุณจะออกจากโปรแกรมให้ทำดังนี้:
/bin/bash ~/process_monitor.sh docky
ตรวจสอบให้แน่ใจว่ามีการตรวจสอบรายการใหม่ ออกจากระบบกลับเข้าและคุณจะเห็นท่าเรือตลอดเวลา
/bin/bash ~/process_monitor.sh docky
ไปยังแอปพลิเคชันเริ่มต้น แต่ก็ไม่มีอะไรเกิดขึ้น ที่จริงฉันเห็นครึ่งหนึ่งของหน้าต่างเทอร์มินัลกะพริบบนหน้าจอเป็นเวลาหนึ่งวินาทีหลังจากการล็อกอิน แต่นั่นคือทั้งหมด สคริปต์ไม่ทำงานแม้ว่าฉันจะเพิ่มคำสั่งนั้นลงในแอปพลิเคชันเริ่มต้นก็ตาม ฉันควรทำอย่างไรดี?
นี่คล้ายกับวิธีการตรวจสอบกระบวนการโดยใช้ลูปจนกระทั่ง
สคริปต์อย่างง่าย:
until docky; do
sleep 1
done
จากนั้นให้ลบ docky ออกจากแอปพลิเคชันเริ่มต้นของคุณและเพิ่ม sh [path to file] เช่น:
sh /usr/wegsehen/Scripts/docky.sh
ฉันเขียนตัวย่อขนาดเล็ก "สคริปต์" ร้อง มันจะวางไข่และตรวจสอบมัน วางไข่โดยลำพังโดยไม่ต้องเชื่อมต่อในแอปพลิเคชันเริ่มต้น
#!/usr/bin/env bash
#
###########################################################
# Author: Serg Kolo , contact: 1047481448@qq.com
# Date: March 31st, 2016
# Purpose: monitor script that respawns docky if it dies
# Written for: http://askubuntu.com/q/752478/295286
# Tested on: Ubuntu 14.04 LTS
###########################################################
# Copyright: Serg Kolo , 2016
#
# Permission to use, copy, modify, and distribute this software is hereby granted
# without fee, provided that the copyright notice above and this permission statement
# appear in all copies.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
# DEALINGS IN THE SOFTWARE.
ARGV0="$0"
ARGC=$#
monitor_pid ()
{
if ps -p $1 > /dev/null ;
then
# Docky is there, no-op
sleep 0.25
continue
else
# Docky is gone,ask user if they want it back
DOCKY_PID=$(ask_restart)
fi
}
spawn_docky()
{
docky &> /dev/null &
echo $! # return docky pid
}
ask_restart ()
{
zenity --question --title="Docky Monitor"\
--text="Docky has quit, do you want to restart it ?" > /dev/null
if [ $? -eq 0 ] ;then
spawn_docky
else
kill -SIGTERM $MYPID # exit the script
fi
}
main()
{
local MYPID=$$
local DOCKY_PID=$(spawn_docky)
while true;
do
monitor_pid $DOCKY_PID
done
}
main
./process_monitor.sh ใช้งานได้ดี
แต่ถ้าฉันใช้ Terminal หรือ yakuake ... ดังนั้นฉันสามารถเปิดเชลล์ใหม่ได้เมื่อฉันใช้ "~ / process_monitor.sh docky" หรือ "/ bin / bash ~ / process_monitor.sh docky"
แต่ถ้าฉันไปที่ "แอปพลิเคชันเริ่มต้น" คลิกเพิ่มและทำตามคำแนะนำเหล่านี้ไม่มีอะไรเกิดขึ้นเมื่อคอมพิวเตอร์ของฉันเริ่มทำงาน ฉันยังคงต้องเรียกใช้คำสั่งนั้นด้วยตนเอง และมันก็ใช้งานได้เมื่อฉันใส่ใน /home/"username"/process_monitor.sh docky ด้วย
ฉันพบหรือสร้างโซลูชัน (ซึ่งไม่ได้โพสต์ที่ใดที่หนึ่ง) เพื่อให้เริ่มต้นโดยอัตโนมัติ
แทนที่จะใช้ ~ / process_monitor.sh docky ให้สร้าง textfile ใหม่:
#! / bin / ทุบตี
~ / process_monitor.sh docky
เสร็จแล้ว
chmod a + x ~ / start.sh
ตอนนี้คุณสามารถรันโปรแกรมใน terminal / yakuake ของคุณหรืออะไรก็ได้ที่คุณต้องการใช้:
~ / start.sh
และมันจะเริ่มต้น ~ / process_monitor.sh docky ดังนั้นมันจะได้รับการเริ่มต้นและเริ่มต้นใหม่หากเกิดปัญหา
คุณสามารถเลือกชื่อใด ๆ ที่คุณต้องการสำหรับ "process_monitor.sh" และ "start.sh" เท่านั้น. sh เป็นสิ่งสำคัญ แต่อย่าลืมเปลี่ยนมันในไฟล์ข้อความของคุณด้วย
ตอนนี้ไปที่ Dash ของคุณพิมพ์และเปิด "แอปพลิเคชันเริ่มต้น"
ตอนนี้คุณสามารถรีสตาร์ทคอมพิวเตอร์และทดสอบ
process_monitor.sh
? ไม่ต้องแก้ไขไฟล์หรือเปลี่ยนแปลงสิทธิ์ใด ๆ