Как записывать вывод в файл журнала с помощью runit

Мы можем упростить это до одного цикл, просто передав все имена файлов за один раз:

#!/bin/bash

for file in /Users/Connor/Documents/GitHub/WhatThePDF/dat/{forms,data,maps,none}/*.pdf
do
  echo "${file}"
  destfile="${file/.pdf/_source.txt}"
  echo "${destfile}"
  qpdf --qdf --object-streams=disable "${file}" "${destfile}"
done

Для удобства чтения мы можем немного разделить его

например cd в каталог и прервать его, если он не удастся:

#!/bin/bash

cd /Users/Connor/Documents/GitHub/WhatThePDF/dat || exit 255

for file in {forms,data,maps,none}/*.pdf
do
  echo "${file}"
  destfile="${file/.pdf/_source.txt}"
  echo "${destfile}"
  qpdf --qdf --object-streams=disable "${file}" "${destfile}"
done
2
14.06.2015, 17:07
1 ответ

Первое, что вам нужно сделать, это выяснить, где в вашей системе находятся файлы runit. Обычно это /etc/runit/. Там вы найдете каталог с именем sv, в котором создается один каталог для каждой службы.

Допустим, вы хотите создать новую службу с именем food. Вы должны создать каталог с именем foodв /etc/runit/sv/.

# mkdir /etc/runit/sv/food

Создайте скрипт runв /etc/runit/sv/food. Предположим, что программа вашего сервиса является исполняемым файлом с адресом /opt/bin/foo. В этом случае ваш скрипт runбудет таким.

#!/bin/sh
exec /opt/bin/foo 2>&1

Для ведения журнала вы должны создать еще один каталог в /etc/runit/sv/foodс именем log. А в нем еще один runскрипт.

#!/bin/sh
exec svlogd -tt <logs-directory>

Убедитесь, что <logs-directory>выходит. И не забудьте сделать оба runскрипта исполняемыми.

# chmod +x /etc/runit/sv/food/run
# chmod +x /etc/runit/sv/food/log/run

Создайте символическую ссылку на ваш каталог foodвнутри/etc/runit/runsvdir/default

# ln -s /etc/runit/sv/food /etc/runit/runsvdir/default/

Чтобы вручную запустить/остановить службу, просто запустите:

# sv start food
# sv stop food

Ознакомьтесь с этим кратким руководством для получения дополнительной информации.

Обратите внимание, что в отличие от руководства я не использовал chpstв своем примере. В этом случае служба foodбудет работать как root. Используйте chpst, как предлагается в руководстве, если вы хотите, чтобы ваша служба работала от имени конкретного пользователя.

0
02.03.2021, 22:29

Теги

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