Как упростить этот набор команд (для перезапуска сервера)?

TOP="`pwd -P`" \
find . -type d -exec sh -c '
   for d
   do
      cd "$d" && \
         find . ! -name . -prune -type f -exec sh -c '\''
            while IFS=\; read -r pat repl
            do
               rename "s/$pat/$repl/g" "$@"
               N=$#
               for unmoved
               do
                  if [ -f "$unmoved" ]
                  then
                     set X ${1+"$@"} "$unmoved"
                     shift
                  fi
               done
               shift "$N"
               case $# in 0 ) break ;; esac
            done < patterns.csv
         '\'' x \{\} +
      cd "$TOP"
   done
' x {} +
  • Настройте find только на сетевые каталоги и выполните sh одним глотком. Это сводит к минимуму количество вызовов sh.
  • Настройте find в каждом из этих каталогов для сетевых обычных файлов только на уровне глубины 1 и запустите их в sh одним глотком. . Это сводит к минимуму количество вызовов утилиты rename.
  • Настройте цикл while для чтения различных пар шаблон <-> замена и примените их ко всем обычным файлам.
  • В процессе переименования-изменения мы сохраняем примечание о том, сохранился ли файл после процесса переименования. Если мы обнаружим, что файл все еще существует, это означает, что по какой-то причине он не может быть переименован и, следовательно, будет опробован на следующей итерации pat/repl. OTOH, если файл был успешно переименован, то мы НЕ применяем следующую итерацию pat/repl к этому файлу, удаляя его из списка аргументов командной строки.
1
24.10.2016, 21:17
1 ответ

Я собираюсь написать этот ответ с точки зрения FreeBSD, но он должен быть применим к Linux и Debian... имена пакетов и прочее могут измениться.

Я был так же недоволен spawn-fcgi. На FreeBSD у него есть сценарий rc.d, но он не подчиняется правилам rc.d (например, он не может "перезапустить").

В самом низу руководства по spawn-fcgi, однако, упоминается supervise. После некоторого поиска мы обнаружили "daemontools" ... На FreeBSD были пакеты для daemontools и daemontools-encore. Пакет -encore казался более новым и имел больше возможностей, поэтому я выбрал его. Моя версия daemontools-encore - 1.10_1.

На FreeBSD для svscan предоставляется rc.d скрипт. На FreeBSD он сканирует /var/service на наличие подкаталогов и запускает "supervise" для каждого из них. Я принял эту конфигурацию по умолчанию и поместил svscan_enable="YES" в /etc/rc.conf. Для Linux, я не знаю, как в скрипте rc, но там сказано, что /service - это каталог по умолчанию.

Внутри /var/service я создал rt-fcgi и внутри rt-fcgi я создал run. "run" содержит:

#!/bin/sh

spawn-fcgi -u www -g www -s /tmp/rt.sock -n -- /usr/local/sbin/rt-server.fcgi

Очевидно, что в linux, это должно содержать пользователя и группу, которые вы используете, а также расположение вашего rt-server.fcgi.

Система svscan, похоже, рекламирует последние несколько строк ошибки в заголовке процесса. Есть и другие варианты. Мой выглядит так:

46495  -  IJ   0:00.01 /usr/local/bin/readproctitle service errors: ...tory (/var/run/rt44/data/gpg). GnuPG support has been disabled (/usr/local/lib/perl5/site_perl/RT/Config.pm:790)\n[52465] [Tue Mar  7 21:09:54 2017] [warning]: The requested port (443) does NOT match the configured WebPort (80).  Perhaps you should Set($WebPort, 443); in RT_SiteConfig.pm, otherwise your internal hyperlinks may be broken. (/usr/local/lib/perl5/site_perl/RT/Interface/Web.pm:1328)\n

... это означает, что у меня неправильно настроен gnupg. Похоже, что там можно искать ошибки и прочее, если только вы не настроили журнал для svscan.

Это довольно тяжелый бит для одного fcgi, но он консервированный и работает. Он имеет дело с выходом скрипта по какой-либо причине, но не управляет PID файлом или сокетом (кроме создания файла сокета).

Должен сказать, что стандарт WSGI мне нравится гораздо больше, чем этот беспорядок.

0
28.01.2020, 01:09

Теги

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