自动初始化多个wsl实例



我想制作一个shell脚本(或类似的脚本(,它可以启动6个独立的wsl终端,然后在每个终端上执行一个特定的程序。每个程序都是一个服务器,所以不能在同一个终端上完成,因为它们是非终止程序。

有可能吗?

任何帮助都将不胜感激!

K

编辑:所以现在我看到powershell中的文件newWsl.ps1

cmd.exe /c start wsl.exe --cd "~" 

然后运行:

powershell -ExecutionPolicy ByPass -File .newWsl.ps1

这是一个开始,然而,现在似乎有非常稀疏的文档。

理想情况下,类似于:

cmd.exe /c start wsl.exe --cd "~" -run "script.sh" 

这就是我所需要的(script.sh位于wsl主目录中的位置(!

有几种方法可以做到这一点。你没有提到你的发行版,所以我假设Ubuntu是WSL:上的默认版本

  • 选项1:Supervisord(或等效(

    通常,如果您在Linux中启动六个不同的服务器,您会希望通过Systemd来完成。WSL不容易支持Systemd(由于Systemd坚持以PID1的形式运行(。然而,我们可以很容易地使用另一个不需要PID1的过程主管。supervisord是我以前在Ubuntu上使用过的一个。

    sudo apt install supervisor supervisor-doc
    

    /etc/supervisor/conf.d/中为每个服务器创建一个文件。例如:

    /etc/supervisor/conf.d/:

    [program:program1]
    command=/home/youruser/program1.sh
    autostart=true
    redirect_stderr=true
    stdout_logfile=/home/youruser/program1.log
    directory=/home/youruser
    user=youruser
    

    为每个服务器创建一个conf。

    然后,启动sudo supervisord将启动所有服务器。启动WSL:时要执行此操作

    wsl -u root supervisord -c /etc/supervisor/supervisord.conf
    

    然后,您还可以打开另一个WSL实例,并看到它们使用运行

    ps -efH
    sudo supervisorctl status
    

    您还可以在每个日志文件中看到捕获的输出。

    有关配置和控制服务器的更多信息,请参阅man supervisorctlman supervisor


  • 选项2:Tmux

    如果您需要前台服务器的所有输出,我建议您通过Tmux运行服务器,默认情况下,Tmux安装在WSL上的Ubuntu中。启动多个Tmux窗口,每个窗口都有不同的应用程序,通过:

    wsl -e tmux new-session ~/program1.sh `; new-window ~/program2.sh `; new-window ~/program3.sh # and so on
    

    然后使用Ctrl+B1trl+A。这是screen(其前身(的默认值,而且它不太像一个手指扭曲器。


  • 选项3:PowerShellStart-Process

    最后,你可能认为你在寻找(从你的问题的措辞来看(PowerShell中的Start-Process。它的默认行为是为每个应用程序创建一个新的进程。

    Start-Process wsl -ArgumentList "~ -e ./program1.sh"
    Start-Process wsl -ArgumentList "~ -e ./program2.sh"
    Start-Process wsl -ArgumentList "~ -e ./program3.sh"
    

    也许是这样。虽然我更喜欢Supervisor或Tmux方法,但对于您的用例,您可能更喜欢多个WSL终端。

相关内容

  • 没有找到相关文章

最新更新