wp-cli update – file rename error

Written by James McDonald

February 17, 2022

I have a script that runs the wp cli to loop through and update the WordPress themes, plugins & core for a number of sites. Each site has different linux user ownership.

The problem I am seeing is an error message of Permission denied when running

sudo -u $OWNER $WP --path=$WP_DIR theme update --all
sudo -u $OWNER $WP --path=$WP_DIR plugin update --all
sudo -u $OWNER $WP --path=$WP_DIR core update
Enabling Maintenance mode...
Downloading update from https://downloads.wordpress.org/plugin/go-live-update-urls.6.3.7.zip...
PHP Warning:  rename(/tmp/go-live-update-urls.6.3.7-JImPud.tmp,go-live-update-urls.6.3.7.zip): Permission denied in /var/www/myuser/web/wp-admin/includes/file.php on line 1201
Warning: rename(/tmp/go-live-update-urls.6.3.7-JImPud.tmp,go-live-update-urls.6.3.7.zip): Permission denied in /var/www/myuser/web/wp-admin/includes/file.php on line 1201
Unpacking the update...
Installing the latest version...
Removing the old version of the plugin...
Plugin updated successfully.
Disabling Maintenance mode...

I have managed to duplicate the problem with a test script. Basically it is a permission denied because the target directory of the rename operation is non-writeable by the user running the script.

<?php

$from = '/tmp/test.txt';
# create the file
file_put_contents($from,  "Hello World");

$to= 'newName.txt';
# try rename it
var_dump(rename($from, $to));
# I am in my home directory
cd /home/myuser

# I am trying to run the script as another user
sudo -u otheruser php test_rename.php

# because the rename to location is myuser home directory 
# the otheruser cant rename it from /tmp to output
PHP Warning:  rename(/tmp/test.txt,newName.txt): Permission denied in /home/jmcd/test_rename.php on line 9
wp cli info

OS:     Linux 5.11.0-1028-azure #31~20.04.2-Ubuntu SMP Tue Jan 18 08:46:15 UTC 2022 x86_64
Shell:  /bin/bash
PHP binary:     /usr/bin/php8.0
PHP version:    8.0.15
php.ini used:   /etc/php/8.0/cli/php.ini
MySQL binary:   /usr/bin/mysql
MySQL version:  mysql  Ver 8.0.28-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))
SQL modes:      NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
WP-CLI root dir:        phar://wp-cli.phar/vendor/wp-cli/wp-cli
WP-CLI vendor dir:      phar://wp-cli.phar/vendor
WP_CLI phar path:       /home/myuser/wp-admin-scripts
WP-CLI packages dir:
WP-CLI global config:
WP-CLI project config:
WP-CLI version: 2.6.0

0 Comments

Submit a Comment

Your email address will not be published.

You May Also Like…

List your VSCode Extensions

Ever wondered what extensions you have installed and want to keep a list? This actually is a good way to audit your...

array_merge vs the + operator

<?php $options = [ 'rootNode' => 'response' ]; // array_merge // the same key appearing later will overwrite echo...