在Debian或Ubuntu Linux上运行apt-get命令后如何运行命令或脚本

时间:2020-01-09 10:38:01  来源:igfitidea点击:

在基于Debian或Ubuntu Linux的系统上,在" apt-get upgrade"或" apt-get dist-upgrade"之后,如何运行自定义命令?
如何在Ubuntu Linux服务器上将脚本挂钩到apt-get命令?
您可以使用/etc/apt/apt.conf文件配置apt-get命令,或将配置放在/etc/apt/apt.conf.d/中的特殊目录中。
以下两个选项使您可以在调用dpkg/apt-get工具之前/之后运行shell命令或脚本:

DPkg::Post-Invoke

语法为:

# This is a list of shell commands to run after invoking dpkg/apt-get #
DPkg::Post-Invoke {"command";};
DPkg::Post-Invoke {"/path/to/sbin/command";};
DPkg::Post-Invoke {"/path/to/script";};

DPkg::Pre-Invoke

语法为:

# This is a list of shell commands to run before invoking dpkg/apt-get #
DPkg::Pre-Invoke {"command";};
DPkg::Pre-Invoke {"/path/to/sbin/command";};
DPkg::Pre-Invoke {"/path/to/script";};

像选项一样,必须在列表符号中指定。
使用/bin/sh按顺序调用命令;如果任何失败,APT将中止。

例子

在此示例中,将自动重新安装只读的/use /文件夹,以便apt-get可以正常工作。
编辑或创建一个名为/etc/apt/apt.conf.d/100update的文件:

$ sudo vi /etc/apt/apt.conf.d/100update

追加/编辑如下:

Pre-Invoke {"/bin/mount -o remount,rw /usr/";};
   Post-Invoke {"/bin/mount -o remount,ro /usr/";};

另一个例子:

Update
  {
     Pre-Invoke {"touch /var/lib/apt/pre-update-stamp"; };
     Post-Invoke {"touch /var/lib/apt/post-update-stamp"; };
  };

运行或挂钩自定义脚本以在Debian或Ubuntu Linux服务器上进行apt-get

在此示例中,我想运行以下脚本(/root/bin/php7helper),以便在运行apt-get命令时可以修补配置文件:

#!/bin/bash
# Name: /root/bin/php7helper
# Purpose: A shell script to patch php 7 fpm on Ubuntu serer

# -----
function update_php7(){
	local u="theitroad"  # new user name
	local r="www-data"   # old user name
	local f="/usr/lib/tmpfiles.d/php7.0-fpm.conf" # config file
	local wrcmd="/etc/init.d/lighttpd restart"    # restart services
	local prcmd="/etc/init.d/php7.0-fpm restart"
	# patch it
	echo "
$ cat /etc/apt/apt.conf.d/80upgradehook
: Patching $f..." sed -i "s/$r/$u/g" $f # restart it $prcmd $wrcmd } # main # update_php7

创建一个名为/etc/apt/apt.conf.d/80upgradehook的文件:

DPkg::Post-Invoke {"/root/bin/php7helper";};

输出示例:

$ sudo apt-get upgrade

现在,只需运行apt-get upgrade命令,脚本/root/bin/php7helper将被执行:

##代码##