自动部署到Azure Linux WebApp后如何正确source .sh文件运行artisan命令
问题根因
- 路径书写错误:你在
postbuild.sh中使用的./home/site/wwwroot/refresh.sh是相对路径,./代表当前工作目录(也就是日志中的临时构建目录/tmp/8d9a71074a40f5b),系统会尝试查找/tmp/8d9a71074a40f5b/home/site/wwwroot/refresh.sh,该路径不存在所以报错。 - 工作目录不匹配:
php artisan命令需要在artisan文件所在的Laravel根目录(也就是/home/site/wwwroot)执行,而脚本默认的执行目录是临时构建目录,所以会报找不到artisan文件的错误。 - 潜在换行符问题:如果脚本是在Windows环境下编写的,默认的CRLF换行符会被Linux系统识别为特殊字符,导致路径末尾带不可见的
\r字符,也会触发找不到文件的报错。
修改方案
1. 修改postbuild.sh
echo "Post Build .sh" echo "Script executed from: ${PWD}" BASEDIR=$(dirname $0) echo "Script location: ${BASEDIR}" echo "====================" # 切换到脚本所在的wwwroot目录 cd $BASEDIR # 给refresh.sh添加执行权限 chmod +x ./refresh.sh # 调用同目录下的refresh.sh source ./refresh.sh
2. 修改refresh.sh
echo "Refresh script" echo "Script executed from: ${PWD}" BASEDIR=$(dirname $0) echo "Script location: ${BASEDIR}" # 直接执行artisan命令(当前已经在wwwroot目录下) php artisan cache:clear
注意事项
- 务必将两个脚本的换行符设置为Linux LF格式,不要使用Windows的CRLF格式,可在代码编辑器右下角调整换行符配置。
- 如果仍有找不到artisan的报错,可以直接写全artisan的绝对路径:
php /home/site/wwwroot/artisan cache:clear,无需依赖当前工作目录。
内容的提问来源于stack exchange,提问作者Makki
相关产品推荐
相关产品推荐

