Запускать все сценарии в папке в фоновом режиме

«Что я могу сделать, чтобы добиться согласованного поведения, как на сервере A (пустой вывод при отсутствии найденных файлов)?»

Чтобы добиться такого поведения с xargs , вы можете использовать - r / - опция no-run-if-empty , чтобы указанная команда не запускалась, если ей не переданы имена файлов. Из справочной страницы :

Если стандартный ввод не содержит никаких небланков, не запускайте команду . Обычно команда запускается один раз, даже если нет ввода.

Обратите внимание, что эта опция является особенностью GNU xargs и не является стандартной, т.е. задана POSIX.

4
11.12.2016, 08:38
5 ответов
for script in ./*.sh; do "$script" & done
wait

Или чтобы ограничить количество одновременных вызовов, с помощью GNU xargs :

xargs -n1 -P5 -r0a <(printf '%s\0' ./*.sh) env

(будьте осторожны, предполагается, что имена скриптов не содержат символов = ).

Или с помощью zsh :

autoload zargs # best in ~/.zshrc
zargs -n1 -P5 ./*.sh -- command

(здесь максимум 5 одновременно).

Помните, что если эти сценарии производят какой-либо вывод, они могут в конечном итоге плохо перемежаться.GNU parallel решает эту проблему, сохраняя вывод каждой команды в отдельном временном файле и выводя их в следующем порядке:

parallel -j0 exec ::: ./*.sh

( -j0 , чтобы запускать все команды параллельно, удалить в ограничить количество ядер ЦП или указать количество самостоятельно).

8
27.01.2020, 20:50

Запускать скрипты в фоновом режиме:

./myscript.sh & ./myscript2.sh & ....
-1
27.01.2020, 20:50

Запускать все сценарии оболочки в фоновом режиме.

sh -x script1.sh & sh -x script2.sh & sh -x script3.sh & 
  • Запускать каждый сценарий в фоновом режиме, чтобы следующая команда выполнялась, не дожидаясь завершения текущей команды.

  • '&' заставляет скрипты запускаться в фоновом режиме, чтобы подсказка не дождалась завершения

0
27.01.2020, 20:50

Вы можете запустить любой исполняемый файл в фоновом режиме, добавив & в конец вызова. Пример врага:

./executbaleFile [args] &

Но когда вы просто сделаете это, если вы закроете сеанс или выйдете из терминала, он отправит SIGHUP процессу, который вы выполняете.

Если вы хотите, чтобы процесс продолжал работать, даже если вы закроете терминал, вы должны ввести команду nohup . например:

nohup ./executbaleFile [args] &

это позволит процессу работать даже после закрытия терминала.

Или используйте disown ., Он удаляет задание из списка заданий оболочки, поэтому при завершении оболочки она не отправляет процессу SIGHUP .

0
27.01.2020, 20:50

Вы можете выполнить все скрипты в папке, передав папку команде run-parts :

run-parts /path/to/folder &
2
27.01.2020, 20:50

Теги

Похожие вопросы