docky가 때때로 충돌합니다. 충돌 후 자동으로 다시 시작하려면 어떻게해야합니까?
docky가 때때로 충돌합니다. 충돌 후 자동으로 다시 시작하려면 어떻게해야합니까?
답변:
먼저 도키를 사용하지 않습니다. 하지만 도키가 $ PATH에 있다고 가정합니다. 그렇지 않은 경우 바이너리의 전체 경로를 지정하십시오.
Bash의 멋진 사용법은 다음과 같습니다.
(원하는 경우 gedit 대신 vim)과 같은 파일로 시작하십시오.
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
시작 응용 프로그램에 추가 했지만 아무 일도 일어나지 않습니다. 실제로 로그인 한 후 화면에 터미널 창이 절반 만 깜박입니다. 그러나 그게 전부입니다. 시작 응용 프로그램에 해당 명령을 추가해도 스크립트가 시작되지 않습니다. 어떻게해야합니까?
작은 "래퍼"스크립트를 작성했습니다. 도키를 스폰하고 모니터링합니다. 시작 응용 프로그램에서 고정하지 않고 이것을 단독으로 생성하십시오.
#!/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는 훌륭하게 작동합니다.
그러나 터미널 또는 yakuake를 사용하는 경우에만 "~ / process_monitor.sh docky"또는 "/ bin / bash ~ / process_monitor.sh docky"를 사용할 때 새 쉘을 열 수 있습니다.
그러나 "시작 응용 프로그램"으로 이동 한 후 추가를 클릭하고이 지침을 따르면 컴퓨터가 시작될 때 아무 일도 일어나지 않습니다. 여전히 해당 명령을 수동으로 실행해야합니다. /home/"username"/process_monitor.sh docky에 넣으면 작동합니다.
자동 시작하기 위해 솔루션을 찾았거나 (어딘가에 게시되지 않은) 솔루션을 만들었습니다.
~ / process_monitor.sh 도키를 사용하는 대신 새 텍스트 파일을 작성하십시오.
#! / bin / bash
~ / process_monitor.sh docky
끝난
chmod a + x ~ / start.sh
이제 터미널 / 야 쿠아 케 또는 원하는 것을 사용하여 프로그램을 실행할 수 있습니다.
~ / start.sh
~ / process_monitor.sh 도키가 시작됩니다. 따라서 충돌이 발생하면 시작되고 다시 시작됩니다.
"process_monitor.sh"및 "start.sh"에 대해 원하는 이름을 선택할 수 있습니다. .sh 만 중요합니다. 그러나 텍스트 파일에서도 변경해야합니다.
이제 대시로 가서 "시작 응용 프로그램"을 입력하고 엽니 다.
이제 컴퓨터를 다시 시작하고 테스트 할 수 있습니다.
process_monitor.sh
않습니까? 파일 편집이나 권한 변경이 필요하지 않습니다.