在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将被执行:
##代码##