そのため、友人のPCに(x)Ubuntu 14.04をインストールした場合があります。自動更新は「ダウンロードおよび自動インストール更新」に設定されます。
問題は、数か月使用した後、パッケージのアップグレードが完了する前にPCをシャットダウンすることです。これは依存関係/パッケージの破損につながり(メッセージを正確に覚えてはいけません)、カーネル、アプリ、ブラウザの更新ができなくなります。これを修正するには、端末コマンドSudo dpkg –configure -a
を実行する必要があります
それは私にとっては大丈夫ですが、彼の場合はアインシュタインの相対性理論です
Windowsのように、PCがシャットダウンまたはリブートする前に、Ubuntuに更新が完了するのを待たせて、壊れたパッケージがなく、同時にPCが自動的に更新されるようにすることはできますか?
Molly-Guard はまさにこの目的のためのプログラムです。少しセットアップする必要があり、/usr/sbin
に/sbin
before$PATH
が必要です。
それ以外の場合、 this によると、正確な詳細はGUI/DEの実装に大きく依存します。あなたの友人がXubuntuを使用していることがわかっているので、これはそれを絞り込みますが、このサポートを組み込みでXfceを再コンパイルしないと(さらに問題が発生します)、非常に難しいようです。
私の豊富な研究によれば、理論的に/sbin/shutdown
を、aptジョブが起動してSudo shutdown -c
またはSudo init 2
で実行中のシャットダウンをキャンセルし、wait
で終了しますが、これがどれほど堅牢かはわかりません。
this によると、スクリプトをフックする代わりに、ユーザーがシャットダウンするのを難しくすることができます。
最後に、 here で概説したように、自動更新に使用しているシステムにunattended-upgrades
をインストールし、シャットダウンする前に終了することを確認できます この回答で詳しく説明します =。
多くのオプションがありますが、そのすべてがさまざまなレベルの信頼性の低いものですが、Iが何を考えているかを解決する最良の方法だと思いますエクステント、基礎となる X/Y問題 ここでプレイ中、これは:
crontab
を使用して、ブートごとにコンピューターをdpkg --configure -a
実行させます。@LovesTha:あなたの目的には、unattended-upgrades
、またはMolly-Guardをお勧めします。
以下のスクリプトは、dbusからの特定のメッセージに対して割り込み駆動型ポーリングを使用し、shutdown/rebootの要求を検出するたびに、dpkg
やapt
などのパッケージマネージャーが実行されているかどうかをテストします。それらが実行されている場合、シャットダウン要求はキャンセルされます。
友人がコマンドラインに触れたくないと言っているので、あなたは彼のマシンにsshするか、やって来て手動でインストールする必要があります。
mkdir $HOME/bin
preventShutdown.sh
という名前のファイルに保存しますchmod +x $HOME/bin/preventShutdown.sh
を使用してそれを行います.desktop
ファイルを$HOME/.config/autostart
に手動で配置することにより、Unity/Gnomeへのログイン時に実行されるルーチンのリストにスクリプトを追加します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
アインシュタインを引用するには:
Only two things are infinite, the universe and human stupidity,
and I'm not sure about the former.
したがって、人間の愚かさに対する100%の保証はありませんが、アインシュタインではない人が物事を壊すことを難しくすることができます。
コンピューターはハンマーではなく、釘でもないことを説明しますが、2種類の食料を必要とする壊れやすいインテリジェントな機器です:電気と更新
代わりに:
•Remminaを使用して、コンテンツをスムーズに実行し続ける