我不能 cache:clear 因为 var/cache/dev/profiler 被 www-data 使用

i can't cache:clear because var/cache/dev/profiler is used by www-data

我是 运行 我在 VPS 上的项目,使用 debian9 和 apache2 作为 HTTP 服务器,并且 我创建了一个脚本 shell 以从 git 获取并使用 composer 拉取和安装组件并执行他应该执行的操作以及当我转到该行时

$ php bin/console cache:clear

我收到错误消息,因为文件夹 var/cache/dev/profiler 归 www-data 所有,而脚本是由另一个用户执行的。

当我使用 root 用户执行脚本时,它可以正常工作,但我收到一条警告,提示我不应该使用 root 用户执行 composer,我应该在脚本末尾添加这一行以获得正确的访问权限

# chown -R user:www-data *
#! /bin/sh
set -e

LOGFILE="$(pwd)/updateServer.log"

git fetch
UPSTREAM=${1:-'@{u}'}
LOCAL=$(git rev-parse @)
REMOTE=$(git rev-parse "$UPSTREAM")
BASE=$(git merge-base @ "$UPSTREAM")

if [ $LOCAL = $REMOTE ]; then
    exit
elif [ $LOCAL = $BASE ]; then
    echo "$(date -d today --rfc-3339=ns) updating" > $LOGFILE
fi

echo "$(date -d today --rfc-3339=ns) update HEAD to $REMOTE" >> $LOGFILE
git reset --hard
git pull
echo "$(date -d today --rfc-3339=ns) DONE" >> $LOGFILE

echo "$(date -d today --rfc-3339=ns) Updating Symfony" >> $LOGFILE
composer install
echo "$(date -d today --rfc-3339=ns) done" >> $LOGFILE

pass=$(date +%s|sha256sum|base64|head -c 32);

echo "$(date -d today --rfccd -3339=ns) removing JWT keys" >> $LOGFILE
rm ./app/config/jwt.yml
rm ./app/config/jwt/private.pem
rm ./app/config/jwt/public.pem
echo "$(date -d today --rfccd -3339=ns) DONE" >> $LOGFILE

openssl genrsa -out app/config/jwt/private.pem -aes256 -passout pass:$pass 4096
openssl rsa -pubout -in app/config/jwt/private.pem -out app/config/jwt/public.pem -passin pass:$pass
chmod g+r ./app/config/jwt/private.pem
echo "$(date -d today --rfc-3339=ns) new JWT keys created" >> $LOGFILE

echo "lexik_jwt_authentication:
    secret_key:       '%kernel.project_dir%/app/config/jwt/private.pem'
    public_key:       '%kernel.project_dir%/app/config/jwt/public.pem'
    pass_phrase:      '$pass'
    token_ttl:        86400
" > ./app/config/jwt.yml

echo "$(date -d today --rfc-3339=ns) update jwt.yml" >> $LOGFILE

echo "$(date -d today --rfc-3339=ns) update doctrine" >> $LOGFILE
php bin/console doctrine:schema:update --force >> $LOGFILE
chown -R user:www-data * >> $LOGFILE
echo "$(date -d today --rfc-3339=ns) fix permissions" >> $LOGFILE
php bin/console cache:clear >> $LOGFILE
chmod -R 775 var
echo "$(date -d today --rfc-3339=ns) clear cache" >> $LOGFILE
chown -R user:www-data *
echo "====================================================" >> $LOGFILE

我想使用 cron 每分钟执行一次这个脚本,以便在我推送到 master 分支时自动更新,所以我应该以 root 身份执行它,还是需要做一些事情让我能够毫无问题地与用户一起执行它.

您根本不需要 运行 crontab 作为 root。确保 'user' 属于 www-data 组并为该用户创建一个 cron 作业:

sudo crontab -e -u user

或者如果您登录为 'user'

crontab -e 

这样你就可以避免在脚本中设置所有者(chown) 在此之前,请记住更正之前由 root

创建的文件和文件夹的任何权限