自动创建屏幕会话以并行运行任务

自动创建屏幕会话以并行运行任务

是否可以编写一个脚本来自动创建屏幕会话(例如创建所有 10 个屏幕会话),以便每个会话都能运行自己的任务?

目前我必须使用screen -S session1→运行某些东西→ Ctrl++A才能D退出screen -S session2...

答案1

假设您想要在相应的会话、、 ...中运行位于当前目录中的脚本task1、 、 ... 、。进一步假设,当每个任务结束时,您希望其会话以交互式 shell 继续,这样您仍然可以附加到它,在其中查看任务的输出,并在其中运行进一步的命令。task2task10screensession1session2session10

for i in {1..10}; do
    screen -dmS "session$i" sh -c "./task$i; exec bash"
done

这是方法jw013 有描述,但会循环重复执行。每个会话都以分离方式启动(-dm)并使用sh -c运行脚本,然后用替换自身bash

在您使用的手动方法中,每个会话都是从附加的开始的,然后您从每个会话中分离(可能最后一个除外),以便创建剩余的会话。但是使用此处显示的方法,即使所有脚本都在运行,也尚未附加任何内容。您可以按照常规方式管理和附加到会话。例如,screen -ls将列出所有会话,并附screen -x session10加到session10正在运行的会话task10

如果您希望每个会话在脚本运行后立即结束(这与您当前手动执行的结果不同),那么您可以使用 just"./task$i"代替sh -c "./task$i; exec bash"

for i in {1..10}; do
    screen -dmS "session$i" "./task$i"
done

无论使用哪种方式,您都可以按照编写的方式运行整个循环,无论您喜欢哪种方式:作为交互式 shell 中的命令、脚本或 shell 函数。循环本身几乎立即完成;无论您的任务运行多长时间,一旦所有会话启动,for循环就会完成。screen

相关内容