You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自动部署到Azure Linux WebApp后如何正确source .sh文件运行artisan命令

问题根因

  1. 路径书写错误:你在postbuild.sh中使用的./home/site/wwwroot/refresh.sh是相对路径,./代表当前工作目录(也就是日志中的临时构建目录/tmp/8d9a71074a40f5b),系统会尝试查找/tmp/8d9a71074a40f5b/home/site/wwwroot/refresh.sh,该路径不存在所以报错。
  2. 工作目录不匹配:php artisan命令需要在artisan文件所在的Laravel根目录(也就是/home/site/wwwroot)执行,而脚本默认的执行目录是临时构建目录,所以会报找不到artisan文件的错误。
  3. 潜在换行符问题:如果脚本是在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 00:24:03