Run a command or script after running apt-get command on a Debian or Ubuntu 2016

run custom command after 'apt-get upgrade' or 'apt-get dist-upgrade' on a Debian or Ubuntu Linux based system? How do I hook a script to apt-get command on my Ubuntu Linux server?

You can configure the apt-get command using /etc/apt/apt.conf file or place configuration in a special directory at /etc/apt/apt.conf.d/. The following two options allows you to run shell commands or script before/after invoking dpkg/apt-get tools:

DPkg::Post-Invoke

The syntax is:
 
# 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

The syntax is:
 
# 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";};
 
Like options this must be specified in list notation. The commands are invoked in order using /bin/sh; should any fail APT will abort.

Examples

In this example auto re-mounting of a readonly /use/ folder so that apt-get will work properly. Edit or create a file called /etc/apt/apt.conf.d/100update:
$ sudo vi /etc/apt/apt.conf.d/100update
Append/edit as follows:
 
   Pre-Invoke {"/bin/mount -o remount,rw /usr/";};
   Post-Invoke {"/bin/mount -o remount,ro /usr/";};
 
Another example:
 
  Update
  {
     Pre-Invoke {"touch /var/lib/apt/pre-update-stamp"; };
     Post-Invoke {"touch /var/lib/apt/post-update-stamp"; };
  };
 

Running or hooking a custom script to apt-get on a Debian or Ubuntu Linux server

In this example I want to run the following script (/root/bin/php7helper) so that I can patch config file upon running apt-get command:
#!/bin/bash
# Name: /root/bin/php7helper
# Purpose: A shell script to patch php 7 fpm on Ubuntu serer
# Author: Vivek Gite <www.cyberciti.biz> under GPL version 2+
# ------
function update_php7(){
 local u="cyberciti"  # 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 "$0: Patching $f..."
 sed -i "s/$r/$u/g" $f
 # restart it
 $prcmd
 $wrcmd
}
# main #
update_php7
 
Create a file called /etc/apt/apt.conf.d/80upgradehook:
$ cat /etc/apt/apt.conf.d/80upgradehook
Sample outputs:
 
DPkg::Post-Invoke {"/root/bin/php7helper";}; 
 
Now simply run the apt-get upgrade command and the script /root/bin/php7helper will get executed:
$ sudo apt-get upgrade
Sample outputs:

See man pages for more info - apt-get(8)apt.conf(5)dpkg(1)

No comments :