Как запустить приложение или сценарий после системного обновления

Я хотел бы запустить свой сценарий после или во время каждого обновления Ubuntu. Например:

Если я делаю команду sudo склонной - получают обновление, я хочу запустить свой сценарий после успешного обновления. То же, если я делаю обновление через программное обеспечение Updater. Действительно ли это возможно?

3
задан 26 April 2015 в 16:48

2 ответа

Как запустить приложение или сценарий после обновления системы

Наблюдайте за изменениями в /var/log/apt/history.log:

sudo inoticoming /var/log/apt/ upgrade_success {} \;

Сценарий upgrade_success:

#!/bin/bash


if [ $1 == "history.log" ]
then

    echo "Changes in \"/var/log/apt/history.log\""

    if [ ! -f "/tmp/upgrade_success_last_run" ] || [ $(stat -c %Y "/tmp/upgrade_success_last_run") -lt $(date "+%s") ]
    then
        # look for changes since the last run
        # of this script ("upgrade_success")
        # in "/var/log/apt/history.log"
        # and make what you want.
    fi

    touch /tmp/upgrade_success_last_run

fi

Как запустить приложение или сценарий после системного обновления

Вы пишете следующее:

...
Я хотел бы запустить свой сценарий после или во время каждого обновления Ubuntu.
...


Создайте этот файл:

/etc/apt/apt.conf.d/16my-script

и добавьте эту строку:

APT::Update::Post-Invoke-Success {"<path_to_your_script> 2>/dev/null || true";};

К сожалению, нет никакого способа сделать то же для Обновления, например:

APT::Upgrade::Post-Invoke-Success {"<path_to_your_script> 2>/dev/null || true";};

ИЛИ


В файле /etc/apt/apt.conf.d/15update-stamp

можно найти эту строку:

APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/update-success-stamp 2>/dev/null || true";};

Поэтому можно наблюдать за изменениями файла /var/lib/apt/periodic/update-success-stamp. После любой команды обновления, даже через программное обеспечение Updater, дата модификации этого файла является датой последнего успешного обновления.

Наблюдайте папку /var/lib/apt/periodic/ с inoticoming:

sudo inoticoming /var/lib/apt/periodic/ upgrade {} \;

Сценарий upgrade:

#!/bin/bash

if [ $1 == "update-success-stamp" ]
then
    sudo apt-get upgrade
fi

И также здесь: К сожалению, нет никакого способа сделать то же для Обновления, например:

APT::Upgrade::Post-Invoke-Success {"touch /var/lib/apt/periodic/upgrade-success-stamp 2>/dev/null || true";};

и наблюдайте за изменениями файла /var/lib/apt/periodic/upgrade-success-stamp.

2
ответ дан 1 December 2019 в 16:28

Можно сделать это путем добавления мнения upgrade псевдоним к ~/.bashrc, и путем выполнения псевдонима для выполнения обновления:

  1. Mark свой сценарий как исполняемый файл: chmod +x <path_to_script>

* <path_to_script> = соединяют каналом к скрипту, который Вы хотите запустить

  1. Добавьте upgrade псевдоним к ~/.bashrc: <<< "alias upgrade='sudo apt-get upgrade && <path_to_script>'" tee -a ~/.bashrc

* <path_to_script> = соединяют каналом к скрипту, который Вы хотите запустить

  1. Обновление ~/.bashrc: . ~/.bashrc

Таким образом, каждый раз Вы работаете upgrade оба sudo apt-get upgrade и Ваш сценарий будет выполняться, сценарий только на успех sudo apt-get upgrade.

1
ответ дан 1 December 2019 в 16:28

Другие вопросы по тегам:

Похожие вопросы: