我正在尝试使用本教程在我公司的半托管 vps 服务器上部署我的网站:https://www.digitalocean.com/community/tutorials/how-to-set-up-automatic-deployment-with-git-with-a-vps
它可以在我自己的 Digital Ocean 服务器上运行,无需任何更改,但在我公司的服务器上设置有所不同。
public_html 文件夹需要由 whm 帐户用户拥有,否则您会收到 500 错误。但 git 用户需要拥有 public_html 文件夹才能使此方法起作用。因此,我正在修改接收后脚本以包含更改所有者的命令,但它似乎不起作用。我究竟做错了什么?
#!/bin/sh
# REPLACE *** WITH ACCOUNT USERNAME
# Change owner of html folder to git
find /home/***/public_html -user root -exec chown -R git:git {} + 2>>logfile
echo "Changed owner to git."
# Update html folder with git push contents
git --work-tree=/home/***/public_html --git-dir=/home/***/repo/live.git checkout -f
echo "Updated public html."
# Restore ownership of directories
find /home/***/public_html -user root -exec chown -R ***:*** {} + 2>>logfile
find /home/***/public_html -user root -exec chown ***:nobody {} + 2>>logfile
echo "Changed owners back."
答案1
我会取消 find;既然你知道目录在哪里,你应该直接处理它。 find 命令引入了一个可能失败的新条件。
无论哪种情况,您都不会终止 find 命令,这可能是一个问题。
这可能效果更好:
#!/bin/sh
# REPLACE foo WITH ACCOUNT USERNAME
# Change owner of html folder to git
chown -R git:git /home/foo/public_html || echo "$date I failed." >> /tmp/foo.log
echo "Changed owner to git."
# Update html folder with git push contents
git --work-tree=/home/foo/public_html --git-dir=/home/foo/repo/live.git checkout -f || echo "$date Git failed." >> /tmp/foo.log
echo "Updated public html."
# Restore ownership of directories
chown -R foo:bar /home/foo/public_html
chown foo:nobody /home/foo/public_html
echo "Changed owners back."