ฉันจะรีสตาร์ท docky โดยอัตโนมัติหลังจากเกิดความผิดพลาดได้อย่างไร


9

เกิดปัญหาการหยุดชะงักเป็นครั้งคราวสำหรับฉัน ฉันจะเริ่มต้นใหม่โดยอัตโนมัติหลังจากที่เกิดข้อผิดพลาดได้อย่างไร


คุณอาจสามารถปรับเปลี่ยนสคริปต์นี้ที่โพสต์โดยคนที่ตอบคำถามคล้าย ๆ กันใน superuser: superuser.com/questions/223449/auto-restart-process-on-crash

คำตอบ:


10

ก่อนอื่นฉันไม่ได้ใช้ 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

และจะเปิดใช้งานโปรแกรมหนึ่งครั้งและให้แน่ใจว่าได้เริ่มโปรแกรมใหม่หากคุณเลือกที่จะออกจากโปรแกรมหรือเลือกที่จะหยุดทำงาน

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

  • ไปที่ Unity Dash พิมพ์และค้นหา "แอปพลิเคชันเริ่มต้น"
  • คลิกเพิ่ม
  • ชื่อ: Docky หรืออะไรก็ได้ที่คุณชอบ
  • คำสั่ง: /bin/bash ~/process_monitor.sh docky
  • ความคิดเห็น: สิ่งที่คุณต้องการ

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


ถ้าฉันใช้ Gnome 3 และฉันไม่มี "แอปพลิเคชันเริ่มต้น" และฉันต้องการใส่ไว้ในไฟล์. desktop แทนล่ะ ฉันจะใส่อะไรในบรรทัด "Exec ="
guttermonk

เข้าใจแล้ว! :) "Terminal = False" และ "Exec = nohup bash -c '~ / process_monitor.sh docky; $ SHELL' &"
guttermonk

ขอบคุณ! ฉันยังใช้สิ่งนี้สำหรับ Dropbox และ Synergy ใช้งานได้ดี!
guttermonk

สคริปต์ทำงานได้อย่างยอดเยี่ยมเมื่อฉันเรียกใช้ด้วยตนเอง แต่ฉันได้เพิ่ม/bin/bash ~/process_monitor.sh dockyไปยังแอปพลิเคชันเริ่มต้น แต่ก็ไม่มีอะไรเกิดขึ้น ที่จริงฉันเห็นครึ่งหนึ่งของหน้าต่างเทอร์มินัลกะพริบบนหน้าจอเป็นเวลาหนึ่งวินาทีหลังจากการล็อกอิน แต่นั่นคือทั้งหมด สคริปต์ไม่ทำงานแม้ว่าฉันจะเพิ่มคำสั่งนั้นลงในแอปพลิเคชันเริ่มต้นก็ตาม ฉันควรทำอย่างไรดี?
Revetahw พูดว่า Reinstate Monica

@guttermonk คุณสามารถให้ความช่วยเหลือเกี่ยวกับการค้นหาของฉันในความคิดเห็นด้านบนได้หรือไม่? ฉันได้โพสต์สิ่งนี้เป็นคำถามที่แยกจากกันด้วย: askubuntu.com/questions/751465/ …
Revetahw พูดว่า Reinstate Monica

1

นี่คล้ายกับวิธีการตรวจสอบกระบวนการโดยใช้ลูปจนกระทั่ง

สคริปต์อย่างง่าย:

until docky; do
  sleep 1
done

จากนั้นให้ลบ docky ออกจากแอปพลิเคชันเริ่มต้นของคุณและเพิ่ม sh [path to file] เช่น:

sh /usr/wegsehen/Scripts/docky.sh


0

ฉันเขียนตัวย่อขนาดเล็ก "สคริปต์" ร้อง มันจะวางไข่และตรวจสอบมัน วางไข่โดยลำพังโดยไม่ต้องเชื่อมต่อในแอปพลิเคชันเริ่มต้น

#!/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

-1

./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 ใหม่:

  • gedit ~ / start.sh
  • พิมพ์ต่อไปนี้

#! / 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 ของคุณพิมพ์และเปิด "แอปพลิเคชันเริ่มต้น"

  • ลบ othe ตั้งค่าการตั้งค่า Docky Startup
  • สร้างใหม่
  • ชื่อ: Docky หรืออะไรก็ตามที่คุณต้องการตั้งชื่อ
  • คำสั่ง: / home / "ชื่อผู้ใช้ของคุณ" /start.sh (สำหรับฉันเป็นเวลานานเช่น /home/kevin/startup.sh)
  • ความคิดเห็น: สิ่งที่คุณต้องการ
  • ไปที่การตั้งค่า Docky ของคุณและปิดการใช้งาน "Start at login"

ตอนนี้คุณสามารถรีสตาร์ทคอมพิวเตอร์และทดสอบ

Videotutorial


ทำไมไม่เพียงสร้างการเชื่อมโยง (สัญลักษณ์) เพื่อprocess_monitor.sh? ไม่ต้องแก้ไขไฟล์หรือเปลี่ยนแปลงสิทธิ์ใด ๆ
David Foerster

คุณหมายถึงอะไรกับลิงก์สัญลักษณ์?
Kevin

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