wp.​​cliとsendmailはcronでは機能しませんが、手動で実行すると機能します。

wp.​​cliとsendmailはcronでは機能しませんが、手動で実行すると機能します。

これがWordPress Stackexchangeに属するのか、それともここに属するのかわかりません。私のコードの最後の行はWordPressに固有のものではないようです。

Cronを使用して毎週実行する.shファイルには、次のコードがあります。

このコードは私のすべてのサイトを通過し、そのサイトが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をコメントアウトしていました。

パスワードなしでsudoを実行できる場合、sudoを実行するためになぜttyが必要ですか?

関連情報