백그라운드 자동 업데이트가 완료되기 전에 Ubuntu가 종료되지 않도록 방지


21

친구의 PC에 (x) 우분투 14.04를 설치했습니다. 자동 업데이트는 "다운로드 및 자동 설치 업데이트"로 설정되어 있습니다.

문제는 몇 개월 사용 후 패키지 업그레이드가 완료되기 전에 자신도 모르게 PC를 종료한다는 것입니다. 종속성 / 패키지가 손상되어 업데이트가 영향을 받고 실행해야 할 필요성sudo dpkg --configure -a

패키지가 끊어지지 않고 PC가 자동으로 업데이트되도록 Windows와 같이 PC를 종료하거나 재부팅하기 전에 업데이트가 완료 될 때까지 Ubuntu를 대기시킬 수 있습니까?


업데이트하는 동안 PC를 afk 상태로 두었습니까?. 확인하십시오System Settings -> Power
BeGood

1
종료가 발생하는 원인은 무엇이라고 생각하십니까? OS는 데이터 손실 위험이 있기 때문에 자체적으로 임의로 종료해서는 안됩니다. 그는 아마도 전원 버튼을 누르거나 전원을 차단합니까?
thomasrutter

임의로 종료되지 않습니다. 사용자 선택입니다. 그러나 몇 달 동안 사용한 후에도 업데이트가 진행되는 동안 PC가 종료됩니다.
Giannis

수동으로 시작하고 잊어 버린 dist-upgrade 중에 서버를 재부팅하도록 명령했지만 비슷하지만 더 나쁜 바인딩에 있습니다. 그것은 당시에 grub을 업데이트하는 중간에 있었음을 분명히 알았으므로 이제는 고칠 필요가 있습니다 (불가능하지는 않지만 이것이 실제로 실제로 필요하고 실행중인 시스템이 아니라는 것이 기쁩니다).
LovesTha

이 작업을 시도하기 위해 bash 스크립트를 작성 중입니다. 완료되면 게시하겠습니다.
cat

답변:


8

Molly-Guard 는이 목적을위한 프로그램입니다. 적은 양의 설정을 수행해야하며 /usr/sbin 이전 /sbin$PATH.

그렇지 않은 경우에 따라 정확한 세부 사항은 GUI / DE의 구현에 크게 의존한다. 우리는 당신의 친구가 Xubuntu를 사용하고 있다는 것을 알고 있기 때문에 이것을 좁히지만이 지원 기능으로 Xfce를 다시 컴파일하지 않으면 (추가 문제가 발생할 수 있음) 매우 어려워 보입니다.

내 풍부한 연구에 따르면 이론적/sbin/shutdown 으로 적절한 작업이 시작되어 실행 중인지 확인 sudo shutdown -c하거나 sudo init 2실행중인 종료 및 취소를 종료 하는 스크립트를 대체 할 수 wait있지만 이것이 얼마나 강력한지는 확실하지 않습니다.

에 따르면 , 당신은 단지에 대한 힘든 만들 수있는 사용자 대신 스크립트를 후킹, 종료한다.

마지막으로 여기 에 요약 된대로 unattended-upgrades지금 자동 업데이트에 사용중인 모든 시스템에 설치할 수 있으며이 답변에 설명 된 대로 종료하기 전에 시스템을 종료해야합니다 .


이 신뢰할 수없는 다양한 수준의 모든있는 많은 옵션이 있지만, 내가 무엇을 해결해 최고의 하나 생각 나는 생각을 어느 정도 기초 X / Y 문제는 여기 놀이,이다 :

부팅 할 때마다 crontab컴퓨터를 실행하는 데 사용 합니다 dpkg --configure -a.

@LovesTha : 당신의 목적을 위해 unattended-upgrades, 또는 아마도 Molly-Guard를 추천합니다.


1
몰리 가드는 그다지 훌륭하지 않습니다. 일반적으로 전원 버튼을 눌러이 상자를 끕니다. 무인 업그레이드 옵션이 합리적으로 보이면 잘 작동합니다.
LovesTha

7

소개

스크립트 노호의 사용은-인터럽트 구동 DBUS에서 특정 메시지 폴링을, 그리고 그것을 종료 / 재부팅에 대한 요청을 볼 때마다, 그것은 패키지 관리자 여부 등 시험 할 것이다 dpkg또는 apt실행 중입니다. 이들이 실행 중이면 종료 요청이 취소됩니다.

설정

친구가 명령 줄을 건드리고 싶지 않다고 언급 했으므로 그의 컴퓨터에 ssh하거나 수동으로 설치해야합니다.

수동 설정

  1. mkdir $HOME/bin
  2. 스크립트 소스를 복사하여 이름이 지정된 파일로 저장하십시오. preventShutdown.sh
  3. 스크립트는 실행 가능해야합니다. 사용 chmod +x $HOME/bin/preventShutdown.sh그렇게하기
  4. Startup Applications 앱을 사용하거나 .desktop파일을 수동으로 배치하여 Unity / Gnome에 로그인 할 때 실행할 루틴 목록에 스크립트를 추가합니다.$HOME/.config/autostart

대체 설정

sudo apt-get install git
cd /opt
sudo git clone https://github.com/SergKolo/sergrep.git
sudo chmod +x /opt/sergrep/*

스크립트를 시작 응용 프로그램으로 추가하십시오.

스크립트 소스

#! /bin/bash

##########################
# AUTHOR: Serg Kolo 
# Date: Saturday, December 26th, 2015
# Description: Script to notify user and prevent 
#   shutdown or reboot
#   if any update or package manager
#   are running. 
# TESTED ON: 14.04.3 LTS, Trusty Tahr
# WRITTEN FOR: http://askubuntu.com/q/702156/295286
# VERSION: 2, removed xdotool, using dbus method
#          changed to C-style of organizing code
#########################

# Copyright (c) 2015 Serg Kolo
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal in 
# the Software without restriction, including without limitation the rights to use,
# copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 
# the Software, and to permit persons to whom the Software is furnished to do so, 
# subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in all 
# copies or substantial portions of the Software.
#
# 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.

# Uncomment the line bellow if needed for debugging
# set -x
###########################
# VARIABLES
###########################

DISPLAY=:0 # has to be set since we are using notify-send


###########################
# MAIN
###########################
#
#    Basic idea : This runs dbus-monitor which waits for
# "RebootRequested" memberf from com.canonical.Unity.Session ,
# which apprears only when the user clicks the shutdown option 
# from the Unity's top right drop down box. Why RebootRequested ?
# Because this message is guaranteed to pop up once user presses
# the shutdown button.
#   The while loop with read command does the big job.
# dbus-monitor sends initial message , so we want to filter only
# The output that contains the string we need, hence the case...esac
# structure employed here. Once we get the proper message.
# we check whether update-manager or package managers are running
# If there is one instance, then call CancelAction method
# and send notification to the user.
#   Both dbus-monitor and while loop run continuously. This
# can be launcher as script in `/etc/rc.local` or `/etc/rc2.d`
# or preferably (!) in `/etc/xdg/autostart/` . 
#   Here is sample /etc/xdg/autostart/preventShutdown.desktop file
# 
# [Desktop Entry]
# Type=Application
# Name=Prevent-Update
# Exec=/home/$USER/bin/preventShutdown.sh
# OnlyShowIn=GNOME;Unity;
# Terminal=false
# 
# Remember to make this file  as well as script be root-owned with 
# chmod +x /path/to/Script.
# It is preferred to store the script in user's personal $HOME/bin
# folder.
# Make sure to edit $HOME/.profile file to include that into $PATH
# variable

interupt()
{
 qdbus com.canonical.Unity /com/canonical/Unity/Session com.canonical.Unity.Session.CancelAction
 notify-send "<<< UPDATE IN PROGRESS; DO NOT SHUT DOWN>>>"
 wall <<< "<<< UPDATE IN PROGRESS; DO NOT SHUT DOWN>>>"
}

main()
{
 dbus-monitor --profile "interface='com.canonical.Unity.Session',type=signal" |
 while read -r line;
 do
  case "$line" in
   *RebootRequested*)
       pgrep update-manager || pgrep apt-get || pgrep dpkg
    if [ $? -eq 0 ]; then
           interupt
        fi
     ;;
   esac
 done
}

main

+1 : 이것은 제가 대본에서하려고했던 것이지만, 원래 예상했던 것보다 훨씬 더 복잡하다는 것을 금방 깨달았습니다.
cat

5
  1. 아인슈타인을 인용하려면 :

    Only two things are infinite, the universe and human stupidity, 
    and I'm not sure about the former.
    

    따라서 인간의 어리 석음에 대한 100 % 보증은 없지만 아인슈타인이 아닌 사람들이 다음과 같은 방법으로 문제를 해결하는 것을 더 어렵게 만들 수 있습니다.

  2. 종료시 자동 업데이트 활성화 .

  3. 컴퓨터는 망치 나 못이 아니라 전기와 업데이트 라는 두 가지 음식이 필요한 깨지기 쉬운 지능형 장비라고 설명 합니다.

또는

  1. 자동 업데이트를 완전히 중지하고 친구를 더 자주 방문하여 업데이트를 직접 설치하십시오.
  2. 컴퓨터를 "조정"할 맥주 나 멋진 식사를 요청하십시오

대안 :
• Remmina를 사용하여 물건을 매끄럽게 유지하십시오.


2
100 % 동의했다. 또한 라우터에서 ssh 및 포트 전달을 설정하여 원격으로 관리 할 수 ​​있습니다.
Sergiy Kolodyazhnyy

2
성 차별이 적 으면 좋을 것이다.
LovesTha

@LovesTha 무슨 성주의?
Fabby

그 의견을 남긴 후 8 시간이 지나면 귀하는 게시물을 훨씬 덜 성범죄자로 편집했습니다. 2 년이 지난 지금 당신은 당신이 처음 쓴 것을 기억하는 데 어려움을 겪고 있습니다.
LovesTha

@LovesTha 그래, 더 이상 섹스 주의자가 아닙니다 ... 댓글을 제거 할 시간입니다. :-)
Fabby
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.