Arka plan otomatik güncellemeleri tamamlanmadan önce Ubuntu'nun kapanmasını önleyin


21

Bir arkadaşımın bilgisayarına bir (x) Ubuntu 14.04 yükledim. Otomatik güncellemeler "indirme ve otomatik yükleme güncellemeleri" olarak ayarlanmıştır.

Sorun, birkaç ay kullanıldıktan sonra, paketlerin yükseltilmesi tamamlanmadan önce bilmeden bilgisayarını kapatmasıdır. Bu, kırık bağımlılıklara / paketlere yol açar, bu da güncellemenin etkilenmesine ve çalıştırma ihtiyacına neden olur.sudo dpkg --configure -a

Bilgisayarın kapatılmasından önce Ubuntu'nun güncellemelerin tamamlanmasını beklemesini sağlamak veya hiçbir zaman kırık paketlerin bulunmamasını ve PC'sinin otomatik olarak güncellenmesini sağlamak için Windows gibi yeniden başlatılması mümkün mü?


Bilgisayarınız yükselirken afk etmesine izin verdiniz mi? Kontrol edinSystem Settings -> Power
BeGood

1
Kapanmaların gerçekleşmesine neden olan ne düşünüyorsunuz? Bir işletim sistemi sadece rastgele kendiliğinden kapanmamalıdır, çünkü bu aynı zamanda bir veri kaybı riskidir. Belki de güç düğmesine basıyor mu, şebekeyi mi kesiyor?
thomasrutter

Rasgele kapanmaz. Bu kullanıcı seçimidir. Ancak aylarca süren kullanımdan sonra, güncelleme devam ederken bilgisayarı kapatmaya başladı
Giannis

Benzer bir şeydeyim ama daha kötü bir ilişkideyim, sunucuma manuel olarak başlattığım (ve unutmuş olduğum) bir yükseltme sırasında yeniden başlatmayı söyledim. O zaman grubun güncellenmesinin ortasında olduğu açıktı, bu yüzden şimdi bunu düzeltmem gerekiyor (imkansız değil, ama bunun gerçekten şu an ihtiyacım olan ve çalıştığım bir sistem olmadığı için mutluyum).
LovesTha

Bunu yapmayı denemek için bir bash betiği yazıyorum, işim bittiğinde yazıyorum.
kedi,

Yanıtlar:


8

Molly-Guard tam olarak bu amaç için bir programdır; küçük bir miktar kurulum yapmanız ve daha /usr/sbin önce /sbin de kullanmanız gerekir $PATH.

Aksi takdirde, uygun bu kesin ayrıntılar GUI / DE uygulamasına oldukça bağımlıdır. Arkadaşınızın Xubuntu kullandığını bildiğimiz için, bu durumu daraltıyor, ancak Xfce'yi bu destek yerleşik olarak (başka sorunlar yaratacak) yeniden derlemeden çok zor görünüyor.

Bol araştırmalarıma göre, teorik olarak sadece /sbin/shutdownuygun bir iş olup olmadığını kontrol eden bir senaryo ile değiştirebilir sudo shutdown -cya da sudo init 2çalışan bir kapanmayı iptal waitedip, çıkıp çıkmadığını kontrol edebilirsiniz, ancak bunun ne kadar sağlam olduğundan emin değilim.

Göre bu , sadece için zor yapabiliriz kullanıcı yerine bir komut dosyası çengel, kapatma için.

Son olarak, burada belirtildiği gibi , unattended-upgradesşimdi otomatik güncellemeler için hangi sistemi kullanıyorsanız kurun ve bu cevabın detaylarında belirtildiği gibi kapanmadan önce çıktığından emin olun .


Orada güvenilmez çeşitli düzeylerde tüm bunların birçok seçenek vardır, ama ne çözer en iyisini düşünüyorum ben olduğunu düşünüyorum, bir dereceye kadar, altta yatan bir X / Y Sorun burada oynayan, şudur:

crontabBilgisayarını dpkg --configure -aher açılışta çalıştırmak için kullanın .

@LovesTha: Amacınız için öneririm unattended-upgradesya da belki Molly-Guard.


1
Molly bekçi benim için o kadar harika değil, normalde güç düğmesine basarak bu kutuyu kapatıyorum. katılımsız yükseltme seçenekleri makul görünüyor, umarım işe yarıyor.
LovesTha

7

Giriş

Komut feryat kullanımları-kesme tahrik dbus belirli mesajları için yoklama ve kapatma / yeniden başlatma talebini gördüğünde, bir paket yöneticisi olsun veya olmasın gibi test edecek dpkgveya aptçalıştırıyorsunuz. Çalışıyorlarsa, kapatma isteği iptal edilir.

Kurmak

Arkadaşınızın komut satırına dokunmak istemediğinden bahsettiğinden, ya makinesine girmeli ya da gelip manuel olarak kurmalısın.

Elle kurulum

  1. mkdir $HOME/bin
  2. Komut dosyasını kopyala, adlı dosyaya kaydet preventShutdown.sh
  3. Komut dosyası çalıştırılabilir olmalıdır. chmod +x $HOME/bin/preventShutdown.shBunu yapmak için kullanın
  4. Başlangıç ​​Uygulamaları uygulamasını kullanarak Unity / Gnome'da oturum açarak çalıştırılacak yordamların listesine veya bir .desktopdosyayı el ile yerleştirerek bir komut dosyası ekleyin .$HOME/.config/autostart

Alternatif kurulum

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

Komut dosyasını başlangıç ​​uygulaması olarak ekleyin.

Komut Dosyası Kaynağı

#! /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: Bu tam olarak bir senaryoda yapacağım şeydi, ancak hızlıca başlangıçta şüphelendiğimden çok daha karmaşık olduğunu anladım.
kedi

5
  1. Einstein'dan alıntı yapmak için:

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

    bu yüzden insan aptallığına karşı% 100 garanti yoktur, ancak Einstein olmayanların işleri kırmasını zorlaştırabilirsiniz:

  2. Kapatıldığında otomatik güncellemeleri etkinleştirme .

  3. Bilgisayarların çekiç veya çivi değil , iki çeşit gıdayı gerektiren hassas, akıllı ekipman parçaları olduğunu açıklayın : elektrik ve güncellemeler.

Alternatif olarak,

  1. Otomatik güncellemeleri tamamen durdurun ve arkadaşınızı daha sık ziyaret ederek başlayın ve güncellemeleri kendiniz için yükleyin.
  2. Bilgisayarı "ayarlamak" için bira veya güzel bir yemek isteyin

Alternatif olarak:
• Eşyaların sorunsuz çalışmasını sağlamak için Remmina'yı kullanın


2
% 100 kabul etti. Ayrıca uzaktan yönetmek için yönlendirici üzerinde ssh ve port yönlendirme ayarlayabilir.
Sergiy Kolodyazhnyy

2
Daha az cinsiyetçilik güzel olurdu.
LovesTha

@LovesTha ne cinsiyetçilik?
Fabby

Bu yorumdan ayrıldıktan 8 saat sonra, daha az cinsiyetçi olacak bir yazı düzenlediniz. Şimdi iki yıldan sonra başlangıçta yazdıklarını hatırlamakta zorlanıyorsunuz.
LovesTha

@LovesTha Evet, artık cinsiyetçi değil ... Yorum kaldırma zamanı. :-)
Fabby
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.