不确定这是否属于 Wordpress Stackexchange 或此处。我认为这里我的代码中的最后一行不是 WordPress 特定的。
我在 .sh 文件中有以下代码,我每周使用 Cron 运行该代码。
该代码会遍历我的所有站点,查找站点是否为 Wordpress,如果是,则运行 wp.cli 来更新 Wordpress、插件和主题。
它将脚本的输出记录到文件中,然后通过电子邮件将该文件发送给我。
如果我从命令行手动运行它,它工作得很好。我通过 cron 手动运行以下命令:
sh /home/update_all_wp_sites.sh > /dev/null 2>&1
如果我通过 cron 运行此命令,则 wp.cli 命令不会运行,末尾的 sendmail 行也不会运行。
我知道 cron 没问题,并且脚本通过 cron 运行,因为我的日志文件仍然每周创建,它仍然在我的注释中添加标识正在运行的站点。它不会像手动运行时那样添加 wp.cli 命令的输出。
起初我以为可能是 tee 的问题,但最后的 sendmail 行不使用 tee。
#!/bin/bash
cd /home
cat /dev/null > update_all_wp_sites.log
echo "AC2" | tee -a update_all_wp_sites.log
echo '----------------' | tee -a update_all_wp_sites.log
for user in * ; do
for d in $user/public_html ; do
count_file=`ls -1 $d/wp-config.php 2>/dev/null | wc -l`
if [ "$count_file" != "0" ]
then
echo '----------------' | tee -a update_all_wp_sites.log
echo $user | tee -a update_all_wp_sites.log
echo '----------------' | tee -a update_all_wp_sites.log
sudo -u $user -i -- /opt/rh/rh-php70/root/usr/bin/php /usr/local/bin/wp core update --path=/home/$d | tee -a update_all_wp_sites.log
sudo -u $user -i -- /opt/rh/rh-php70/root/usr/bin/php /usr/local/bin/wp plugin update --all --path=/home/$d | tee -a update_all_wp_sites.log
sudo -u $user -i -- /opt/rh/rh-php70/root/usr/bin/php /usr/local/bin/wp language core update --path=/home/$d | tee -a update_all_wp_sites.log
sudo -u $user -i -- /opt/rh/rh-php70/root/usr/bin/php /usr/local/bin/wp theme update --all --path=/home/$d | tee -a update_all_wp_sites.log
fi
done
for d2 in $user/domains/*/public_html ; do
count_file=`ls -1 $d2/wp-config.php 2>/dev/null | wc -l`
if [ "$count_file" != "0" ]
then
echo '----------------' | tee -a update_all_wp_sites.log
echo $user | tee -a update_all_wp_sites.log
echo '----------------' | tee -a update_all_wp_sites.log
sudo -u $user -i -- /opt/rh/rh-php70/root/usr/bin/php /usr/local/bin/wp core update --path=/home/$d | tee -a update_all_wp_sites.log
sudo -u $user -i -- /opt/rh/rh-php70/root/usr/bin/php /usr/local/bin/wp plugin update --all --path=/home/$d | tee -a update_all_wp_sites.log
sudo -u $user -i -- /opt/rh/rh-php70/root/usr/bin/php /usr/local/bin/wp language core update --path=/home/$d | tee -a update_all_wp_sites.log
sudo -u $user -i -- /opt/rh/rh-php70/root/usr/bin/php /usr/local/bin/wp theme update --all --path=/home/$d | tee -a update_all_wp_sites.log
fi
done
done
echo -e "Subject: AC2 WP Updates Log" | sendmail -v [email protected] < update_all_wp_sites.log
谢谢
注意:我使用 rh-php70 作为较旧的服务器,以防有人问起,我无法在其上获取 PHP 7.4。
更新:在服务器管理控制台中运行 cron 会显示以下内容:
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
sudo: sorry, you must have a tty to run sudo
Mail Delivery Status Report will be mailed to <root>
答案1
根本原因是更新中报告的问题:
sudo: sorry, you must have a tty to run sudo
根据以下帖子,我已在 /etc/sudoers 中注释掉了 Defaults requiretty,现在它可以工作了: