我想在每次 Ubuntu 更新之后或期间启动我的脚本。例如:
如果我发出命令 sudo apt-get upgrade,我希望在成功更新后启动我的脚本。如果我通过软件更新程序进行更新,情况也是如此。可以吗?
答案1
如何在系统启动后启动应用程序或脚本升级
留意以下变化/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
。在任何更新命令,甚至通过软件更新程序,该文件的修改日期是最后一次成功更新。
/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
upgrade
您可以通过向添加 say别名~/.bashrc
,然后运行别名来执行升级来实现此目的:
- 将您的脚本标记为可执行:
chmod +x <path_to_script>
*<path_to_script> = 您要运行的脚本的路径
- 添加
upgrade
别名至~/.bashrc
:<<< "alias upgrade='sudo apt-get upgrade && <path_to_script>'" tee -a ~/.bashrc
*<path_to_script> = 您要运行的脚本的路径
- 更新
~/.bashrc
:. ~/.bashrc
这样,每次运行upgrade
两者时sudo apt-get upgrade
,您的脚本都会被执行,只有在成功后才会执行脚本sudo apt-get upgrade
。