Я хотел бы запустить серверный процесс под управлением systemd и добавить его стандартный вывод и ошибки в файл, где путь к файлу содержит дату, например так:
/initech/logs/tps-report-app/sales/2023/09/11/console.log
В идеале я бы хотел, чтобы этот путь автоматически обновлялся при изменении даты, но если этого не произойдет, это не конец света, поскольку мы в любом случае перезапускаем наши серверы ночью.
Единственное, чего я не хочу делать, так это выполнять традиционную ротацию журналов, когда выходные данные записываются в файл с фиксированным путем, а затем позже ротируются в файл с датированным путем.
TheПараметр конфигурации StandardOutputпозволяет мне добавлять вывод в файл с помощью append:path
, но в этой строке нет упоминания о подстановке переменных, поэтому я предполагаю, что это нужно исправить. Есть ли способ включить дату в этот путь?
Если нет, то какой подход здесь лучше? Подключить вывод через именованный канал или что-то подобное к демону журнала, например multilog? Есть ли что-нибудь подобное в «инструментарии» systemd? Обернуть процесс сервера в скрипт типа цепной загрузки, который перенаправляет стандартный вывод и ошибки? Что-то еще?
решение1
Например, вы можете ежедневно обновлять логи с помощью logrotate
. Вместо использования StandardOutput
вы можете указать своему программному обеспечению отправлять логи в /path/$( something-bashy here)/console.log и как часть postrotate
создания пути, затем перезапустить соответствующую службу.
Редактировать: только что заметил, что вы упомянули, что серверы перезапускаются каждую ночь. Тогда ваша единственная забота — убедиться, что путь к файлу журнала существует. В этом случае я бы включил создание пути к файлу журнала в ExecStart
. Что-то вроде
ExecStart=/bin/bash -ac \
"mkdir /my/path -p && run_app.sh"