From e7962fdee0d4499b860986263219a54423bf98b7 Mon Sep 17 00:00:00 2001
From: Matthew Saunders Brown <matthewsaundersbrown@gmail.com>
Date: Tue, 26 Sep 2023 10:25:30 -0700
Subject: [PATCH] add timeout and error notice for is-installed check

---
 sbin/wp-cron.sh | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/sbin/wp-cron.sh b/sbin/wp-cron.sh
index 202ae27..c20b546 100755
--- a/sbin/wp-cron.sh
+++ b/sbin/wp-cron.sh
@@ -10,13 +10,13 @@ if [ "$USER" != "root" ]; then
   exec sudo $0
 fi
 
-# create empty virtualhostExclusionArray array (any domains added to this array will be skipped)
-declare -a virtualhostExclusionArray
-
 # create virtualhostArray listing all virtualhost on the server
 cd /srv/www
 virtualhostArray=(`ls -1|grep -v ^html$`)
 
+# create empty virtualhostExclusionArray array (any domains added to this array will be skipped)
+declare -a virtualhostExclusionArray
+
 # check for local config, which can be used to override either of the above arrays
 if [[ -f /usr/local/etc/wp-cron.conf ]]; then
   source /usr/local/etc/wp-cron.conf
@@ -33,12 +33,13 @@ do
     if [ -f /srv/www/$VHOST/html/wp-config.php ]; then
       VHOST_USER=$(stat -c '%U' /srv/www/$VHOST)
       # confirm that WP really is installed
-      if $(su -c "wp core is-installed --path=/srv/www/$VHOST/html/" $VHOST_USER); then
+      if $(timeout 5 su -c "wp core is-installed --path=/srv/www/$VHOST/html/" $VHOST_USER); then
         # run cron for VHOST as VHOST_USER
         /usr/bin/logger --tag wp-cron "running wp-cli cron for $VHOST as $VHOST_USER"
         su -c "/usr/local/bin/wp cron event run --due-now --quiet --path=/srv/www/$VHOST/html/" $VHOST_USER
+      else
+        echo "NOTICE: 'wp core is-installed' failed for $VHOST (user $VHOST_USER)" | mail -s "wp-cron" webmaster -aFrom:webmaster
       fi
     fi
   fi
 done
-