我想制作一个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 supervisorctl
和man 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:PowerShell
Start-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终端。