バックグラウンドでの自動更新が完了する前にUbuntuがシャットダウンしないようにします


21

友人のPCに(x)Ubuntu 14.04をインストールしました。自動更新は「ダウンロードおよび自動インストール更新」に設定されます。

問題は、数か月使用した後、パッケージのアップグレードが完了する前に知らずにPCをシャットダウンしてしまうことです。依存関係/パッケージが破損し、更新が影響を受け、実行する必要が生じます。sudo dpkg --configure -a

Windowsのように、PCのシャットダウンまたは再起動の前に、Ubuntuに更新が完了するのを待たせて、壊れたパッケージが存在せず、PCが自動的に更新されるようにすることは可能ですか?


更新中にPCを操作しましたか?チェックしてくださいSystem Settings -> Power
BeGood

1
シャットダウンの原因は何だと思いますか?OSは、データ損失のリスクもあるため、ランダムにシャットダウンするだけではいけません。彼はおそらく電源ボタンを押すか、主電源を切るのでしょうか?
トーマスラッター

ランダムにシャットダウンすることはありません。ユーザーの選択です。しかし、何ヶ月も使用した後、更新が進行中の間に彼はたまたまPCをシャットダウンしました
Giannis

手動で開始した(そして忘れてしまった)dist-upgradeの最中にサーバーを再起動するように指示したので、私は似ていますが、より悪いバインドをしています。当時はgrubの更新中だったのは明らかなので、今はそれを修正する必要があります(不可能ではありませんが、これが本当に必要なシステムではないことをうれしく思います)。
LovesTha

これを行うためにbashスクリプトを書いています。完了したら投稿します。

回答:


8

Molly-Guardはまさにこの目的のためのプログラムです。それはあなたがセットアップの少量を行うには、持っている必要が/usr/sbin 前に /sbinあなたに$PATH

それ以外の場合は、によると、この正確な詳細は、GUI / DEの実装に大きく依存しています。あなたの友人がXubuntuを使用していることがわかっているので、これはそれを絞り込みますが、このサポートを組み込みでXfceを再コンパイルしないと(さらに問題が発生します)、非常に難しいようです。

私の豊富な研究によると、理論的に/sbin/shutdownは、aptジョブが起動して実行されているかどうかを確認するスクリプト、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. スタートアップアプリケーションアプリを使用して、または手動で.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:これはまさにスクリプトでやろうとしていたことですが、すぐに、当初考えていたよりもはるかに複雑であることにすぐに気付きました。

5
  1. アインシュタインを引用するには:

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

    したがって、人間の愚かさに対する100%の保証はありませんが、アインシュタインではない人が物事を壊すことを難しくすることができます。

  2. シャットダウン時に自動更新を有効にします。

  3. コンピューターはハンマーでも釘でもない、電気と更新という2種類の食料を必要とする壊れやすいインテリジェントな機器であることを説明します。

あるいは、

  1. 自動更新を完全に停止し、より頻繁に友人にアクセスして開始し、自分用に更新をインストールします。
  2. コンピューターを「調整」するためにビールや素敵な食事を求めます

または:
•Remminaを使用して、スムーズに実行し続ける


2
100%が同意しました。また、ルーターでsshとポートフォワーディングをセットアップして、リモートで管理することもできます。
セルギーKolodyazhnyy

2
性差別は少ないほうがいいでしょう。
-LovesTha

@LovesThaどんな性差別?
ファビー

私がそのコメントを残してから8時間後に、あなたは投稿を性差別主義者になるように編集しました。2年以上経った今、あなたが最初に書いたものを思い出すのに苦労しています。
LovesTha

@LovesThaええ、もう性差別ではありません...コメントを削除する時間。:-)
Fabby
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.