在尝试使用 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
 

