我不能 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
创建的文件和文件夹的任何权限
我是 运行 我在 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
创建的文件和文件夹的任何权限