在尝试使用 envoy 尝试自动部署的时候,遇到了问题,即:如果我要自己创建一个新的域名,那只能上线去执行 lnmp vhost add 的命令。
为什么要使用 lnmp 呢?其实他对我的作用只有一个,多版本的 PHP。因为现在在线上,各种不同版本的 PHP 都在跑,有 PHP5.6 / PHP7.1 / PHP8.1估计后面还会有更多的版本。
于是,我就想着用 expect 来处理
sudo /usr/bin/expect<<EOF
spawn lnmp vhost add
expect {
"Please enter domain" {send "{{$host}}\n";exp_continue}
"Enter more domain name" {send "\n";exp_continue}
"Please enter the directory" {send "\n";exp_continue}
"Allow Rewrite rule" {send "y\n";exp_continue}
"Default rewrite" {send "laravel\n";exp_continue}
"Enable PHP Pathinfo" {send "\n";exp_continue}
"Allow access log" {send "\n";exp_continue}
"Enable IPv6" {send "\n";exp_continue}
"Enter your choice " {send "\n";exp_continue}
"Add SSL Certificate" {send "\n";exp_continue}
"Press any key to start" {send "\r"; exp_continue}
}
expect eof
EOF
但执行后一直报错:
[mpass]: expect: spawn id exp3 not open
[mpass]: while executing
[mpass]: "expect eof"
仔细查了半天,原来最后一句还用了 exp_continue。。expect 认为还没有执行完。所以。就行报错了。
将最后一个 exp_contiue 删除。再次执行,就正常了
XML/HTML代码
- @task('lnmp' ,['on'=>'dev'])
- @if($force)
- sudo rm -rf /usr/local/nginx/conf/vhost/{{$host}}.conf
- sudo rm -rf /home/wwwroot/{{$host}}
- @endif
- sudo /usr/bin/expect<<EOF
- spawn lnmp vhost add
- expect {
- "Please enter domain" {send "{{$host}}\n";exp_continue}
- "Enter more domain name" {send "\n";exp_continue}
- "Please enter the directory" {send "\n";exp_continue}
- "Allow Rewrite rule" {send "y\n";exp_continue}
- "Default rewrite" {send "laravel\n";exp_continue}
- "Enable PHP Pathinfo" {send "\n";exp_continue}
- "Allow access log" {send "\n";exp_continue}
- "Enable IPv6" {send "\n";exp_continue}
- "Enter your choice " {send "\n";exp_continue}
- "Add SSL Certificate" {send "\n";exp_continue}
- "Press any key to start" {send "\r";}
- }
- expect eof
- EOF
- ls -lah /home/wwwroot/
- @endtask