Monitor OS Default Php And Restore If Changed

Discussion in 'Tips/Tricks/Mods' started by ahrasis, Nov 21, 2019.

  1. ahrasis

    ahrasis Well-Known Member HowtoForge Supporter

    I found that default php for Ubuntu may be changed when updating php in multiple php environment or thus this update may caused problem for ISPConfig and other programs relying on default php. So I tried this script (only for ubuntu 18.04 and default php7.2) with monit:
    Code:
    OUTPUT=`php -v | head -n 1 | cut -d ' ' -f 2 | cut -f1-2 -d'.'`
    if [ $OUTPUT = 7.2 ]; then exit 0; fi
    exit 1
    
    Code:
    check program default-php with path /usr/share/dphp/dphp.sh
     if status != 0 then exec "/usr/bin/update-alternatives --set php /usr/bin/php7.2"
    
    It seems working for now but if you see any things that can be improved in the aboves, do reply with your suggestion.

    EDITED:
    The above implementation actually creates zombie's process, which I don't like, so I modified the code and use a much simpler approach yet cover wider OS version as follows:

    1. Create an executable bash script for checking and restoring OS default php. E.g. /usr/share/default-php/default-php.sh
    Code:
    #!/bin/sh
    ### BEGIN INIT INFO
    # Provides: Check default OS php & restore if it was changed
    # Required-Start:  $local_fs $network
    # Required-Stop:  $local_fs
    # Default-Start:  2 3 4 5
    # Default-Stop:  0 1 6
    # Short-Description: Check default OS php & restore if it was changed
    # Description: Check default OS php & restore if it was changed
    ### END INIT INFO
    
    osName=`grep -oP '(?<=^ID=).+' /etc/os-release`
    osVersion=`grep -oP '(?<=^VERSION_ID=).+' /etc/os-release | tr -d '"'`
    phpVersion=`php -v | head -n 1 | cut -d ' ' -f 2 | cut -f1-2 -d'.'`
    #IF UBUNTU
    if [ $osName == ubuntu ] && [ $osVersion == 16.04 ] && [ $phpVersion != 7.0 ]; then /usr/bin/update-alternatives --set php /usr/bin/php7.0; fi
    if [ $osName == ubuntu ] && [ $osVersion == 18.04 ] && [ $phpVersion != 7.2 ]; then /usr/bin/update-alternatives --set php /usr/bin/php7.2; fi
    if [ $osName == ubuntu ] && [ $osVersion == 20.04 ] && [ $phpVersion != 7.4 ]; then /usr/bin/update-alternatives --set php /usr/bin/php7.4; fi
    #IF DEBIAN
    if [ $osName == debian ] && [ $osVersion == 8 ] && [ $phpVersion != 5.6 ]; then /usr/bin/update-alternatives --set php /usr/bin/php5.6; fi
    if [ $osName == debian ] && [ $osVersion == 9 ] && [ $phpVersion != 7.0 ]; then /usr/bin/update-alternatives --set php /usr/bin/php7.0; fi
    if [ $osName == debian ] && [ $osVersion == 10 ] && [ $phpVersion != 7.3 ]; then /usr/bin/update-alternatives --set php /usr/bin/php7.3; fi
    
    2. Create a con job for it to run every 10 minutes (or your preferred time) E.g. /etc/cron.d/default-php
    Code:
    */10 * * * * root /usr/share/default-php/default-php.sh 2>&1 | while read line; do echo `/bin/date` "$line" >> /var/log/default-php; done
    
    This will run the script every 10 minutes and if it founds, for example, that Ubuntu 18.04 default php version has been changed, php7.2 will then be restored.

    Feel free to use, modify and/or expand the script for your personal usages.
     
    Last edited: May 25, 2020
    GuilhermeAL, nhybgtvfr and till like this.
  2. ahrasis

    ahrasis Well-Known Member HowtoForge Supporter

    I revisited this to ensure if there is anything I can do to rewrite the code with monit, if one really wants to use it to monitor php version change and thank god, I see one.

    I think it can be done as follows (e.g. for Ubuntu 18.04):
    Code:
    check directory with path /etc/php/7.2/fpm
       if changed timestamp then exec "/usr/bin/update-alternatives --set php /usr/bin/php7.2"
    I haven't tested this fully but it should work for those who want to use monit to monitor their server default php version and fix it automatically if it was changed. I think we may also check "/var/run/php" or its pid file for change of timestamp.

    The other way will be to use incron to monitor and similarly run something like the above if any of the php directory is changed.
     
    Last edited: Nov 16, 2020
    GuilhermeAL and madmucho like this.

Share This Page