ป้องกัน Ubuntu จากการปิดเครื่องก่อนการอัปเดตพื้นหลังอัตโนมัติให้เสร็จสมบูรณ์


21

ฉันได้ติดตั้ง (x) Ubuntu 14.04 บนพีซีของเพื่อนแล้ว การอัปเดตอัตโนมัติถูกตั้งค่าเป็น "ดาวน์โหลดและอัปเดตการติดตั้งอัตโนมัติ"

ปัญหาคือหลังจากใช้งานไปหลายเดือนเขาก็ปิดเครื่องโดยไม่รู้ตัวก่อนที่แพ็คเกจจะอัพเกรดเสร็จสมบูรณ์ สิ่งนั้นนำไปสู่การพึ่งพา / แพ็กเกจที่ใช้งานไม่ได้ซึ่งนำไปสู่การอัปเดตที่ได้รับผลกระทบและจำเป็นต้องเรียกใช้sudo dpkg --configure -a

เป็นไปได้ไหมที่ทำให้ Ubuntu รอการอัปเดตให้เสร็จสิ้นก่อนที่จะปิดเครื่อง PC หรือรีบูตเหมือน Windows เพื่อให้แน่ใจว่าจะไม่มีแพ็คเกจที่ใช้งานไม่ได้และพีซีของเขาจะยังคงอัพเดทโดยอัตโนมัติอยู่หรือไม่?


คุณปล่อยให้พีซีของคุณค้างอยู่ขณะกำลังทำงาน? ตรวจสอบของคุณSystem Settings -> Power
BeGood

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

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

ฉันอยู่ในลักษณะคล้ายกัน แต่แย่กว่านั้นเพราะฉันบอกเซิร์ฟเวอร์ให้รีบูตการอัพเกรดซ้ำที่ฉันเริ่มด้วยตนเอง (และลืมไป) เห็นได้ชัดว่ามันเป็นช่วงกลางของการปรับปรุงด้วงในเวลาดังนั้นตอนนี้ฉันต้องแก้ไข (ไม่เป็นไปไม่ได้ แต่ฉันดีใจที่นี่ไม่ใช่ระบบที่ฉันต้องการจริงๆและทำงานอยู่ตอนนี้)
LovesTha

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

คำตอบ:


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ทุกครั้งที่บู๊ต

@LoveTha: สำหรับวัตถุประสงค์ของคุณฉันแนะนำ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. เพิ่มสคริปต์ลงในรายการกิจวัตรที่จะใช้ในการเข้าสู่ระบบสู่ Unity / Gnome โดยใช้แอปเริ่มต้นแอปพลิเคชันหรือวาง.desktopไฟล์ด้วยตนเอง$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: นี่คือสิ่งที่ฉันจะทำในสคริปต์ แต่ฉันรู้ได้อย่างรวดเร็วว่ามันซับซ้อนกว่าที่ฉันสงสัย
แมว

5
  1. หากต้องการอ้างอิง Einstein:

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

    ดังนั้นจึงไม่มีการรับประกัน 100% ต่อความโง่เขลาของมนุษย์ แต่คุณสามารถทำให้ยากขึ้นสำหรับผู้ที่ไม่ได้ Einsteins ทำลายสิ่งต่าง ๆ โดย:

  2. การเปิดใช้งานการปรับปรุงอัตโนมัติปิดลง

  3. อธิบายว่าคอมพิวเตอร์ไม่ใช่ค้อนหรือเล็บ แต่เป็นชิ้นส่วนที่ชาญฉลาดและเปราะบางซึ่งต้องการอาหารสองชนิดคือไฟฟ้าและการอัพเดท

อีกวิธีหนึ่งคือ

  1. หยุดการอัปเดตอัตโนมัติทั้งหมดและเริ่มโดยไปที่เพื่อนของคุณบ่อยขึ้นและติดตั้งการอัปเดตด้วยตนเอง
  2. ขอเบียร์หรืออาหารอร่อย ๆ เพื่อ "ปรับ" คอมพิวเตอร์

อีกวิธีหนึ่ง:
•ใช้ Remmina เพื่อให้การทำงานราบรื่นขึ้น


2
ตกลง 100% นอกจากนี้เขายังสามารถตั้งค่า ssh และพอร์ตที่ส่งต่อบนเราเตอร์เพื่อจัดการมันจากระยะไกล
Sergiy Kolodyazhnyy

2
การกีดกันทางเพศน้อยลงจะดี
LovesTha

@LoveTha อะไรผู้หญิง?
Fabby

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

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