LINUX.ORG.RU
ФорумAdmin

перенаправить логфайл в systemd сервис для journald?

 , , ,


1

1

пытался примерно такое сделать в systemd
и желательно одной командой или лучше специальным инструментом, без внешнего скрипта

ExecStartPre=/bin/cat /opt/file\ name.log >> /var/log/opt.log && rm /opt/file.log

или как перенаправить логфайл в systemd сервис, чтобы journald записывал лог?



Последнее исправление: nanosecond (всего исправлений: 7)
Ответ на: комментарий от nanosecond

Тогда в чём проблема? ExecStart=/bin/sh -c "...". Но ты делаешь какую-то дичь, логи обычно нужны во время работы сервиса, а не постфактум.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от intelfx

su[1814335]: su: должен запускаться из терминала
bash[1833280]: /bin/bash: su: Нет такого файла или каталога
.service:13: Ignoring unknown escape sequences: «cat …»

ExecStartPre=/bin/su -c "..."
ExecStartPre=/bin/bash su -c "..."

/bin/bash и /bin/su в системе есть

nanosecond
() автор топика
Последнее исправление: nanosecond (всего исправлений: 5)
Ответ на: комментарий от intelfx

логи обычно нужны во время работы сервиса, а не постфактум.

согласен, но это уже другая история

nanosecond
() автор топика
Ответ на: комментарий от nanosecond

Да что ты такое творишь вообще?

Вторая форма записи просто некорректна, bash так не вызывается. Открой ман, почитай.

Первая форма корректна синтаксически, но не семантически. su предназначен для запуска пользователем из терминала, о чём тебе и сообщается. При запуске сервиса из systemd никакого терминала ему не выделяется, следовательно su в этом случае использовать нельзя.

В любом случае остаётся открытым вопрос, нахрена тебе вообще su? Это systemd, ты и так суперпользователь. Что ты пытаешься сделать и что ты перед этим курил?

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 3)
Ответ на: комментарий от intelfx

спасибо догнал, забыл что это sh а не su))

ExecStartPre=/bin/sh -c "..."

что ты перед этим курил?

аллергик уставший

nanosecond
() автор топика
Последнее исправление: nanosecond (всего исправлений: 1)
Ответ на: комментарий от intelfx

пробелы в пути к файлу
как два файла

sh[2001824]: cat: /opt/file: Нет такого файла или каталога
sh[2001824]: cat: name.log: Нет такого файла или каталога

Environment=FILE="/opt/file name.log"
ExecStartPre=/bin/sh -c "cat $FILE >> /var/log/opt.log && rm $FILE"
nanosecond
() автор топика
Ответ на: комментарий от nanosecond

что конкретно нужно экранировать

пробел в имени файла.

и как?

гуля в помощь

anc ★★★★★
()
Ответ на: комментарий от nanosecond

Ну напиши скрипт и запускай его через ExecStartPre и/или ExecStopPost. Ещё можно хардлинк делать с датой в имени, например, если ФС позволяет.

Radjah ★★★★★
()
Ответ на: комментарий от Radjah

слишком много суеты в отдельном скрипте для этой проги, написать то напишу, но вспоминать потом не хочется, экраны лучше сделать

nanosecond
() автор топика
Последнее исправление: nanosecond (всего исправлений: 1)
Ответ на: комментарий от nanosecond

Пытаться впихнуть невпихуемое в юнит - нормально.

Сделать в виде отдельного скрипта - суета.

Окей.

Radjah ★★★★★
()
Ответ на: комментарий от nanosecond
ln -s "/opt/file name.log" /var/log/symlink.log
Environment=SYMLINK="/var/log/symlink.log"
ExecStartPre=/bin/sh -c "cat $SYMLINK >> /var/log/opt.log && > $SYMLINK"
ExecStartPost=/bin/sh -c "cat $SYMLINK >> /var/log/opt.log && > $SYMLINK"

не проверял еще

nanosecond
() автор топика
Последнее исправление: nanosecond (всего исправлений: 1)
Ответ на: комментарий от nanosecond

лучше файлы проприетара хранить в директории проприетара,
а логи сохранять хардлинком или лучше переименовывать,
как их правильно переименовывать без конфликтов и чтобы logrotate подобные сожрали и делали чистку?

nanosecond
() автор топика
Последнее исправление: nanosecond (всего исправлений: 1)
Ответ на: комментарий от nanosecond

ок, как перенаправить логфайл в systemd сервис, чтобы journald записывал лог?

Если имя логфайла заранее известно, попробуй сделать под этим именем симлинк на /dev/stderr.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

systemd is not a shell

Это серьёзное упущение.

anonymous
()

Тебе нужен просто скрипт запуска твоей программулины.

#! /bin/sh
cp /opt/file\ name.log /var/tmp/opt_file.backup.log ;
/opt/appname;

Перед запуском программы просто копируй файл лога и всё. Укажи такой скрипт вместо имени бинарника программы там где оно запускается само.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от anonymous

отдельным юнитом получается

[Service]
ExecStart=/usr/bin/systemd-cat -t "z.service" tail -f ${LOGFILE}

вариант два

[Service]
ExecStart=/bin/tail -f ${LOGFILE}

оба варианта нормально работают при рестарте z.service, но tail[4058154]: отображается во втором варианте
и лишние строки получаются

nanosecond
() автор топика
Последнее исправление: nanosecond (всего исправлений: 2)
Ответ на: комментарий от nanosecond
#! /bin/sh
cp /opt/file\ name.log /var/tmp/opt_file.`date +"%m-%d-%y-%H-%M"`.log ;
/opt/appname $@;

Суёшь этот скрипт в тот же каталог где бинарь программы, а там через что запускаешь меняешь appname на этот скрипт appname.sh И да добавил $@ что-бы если твоя программа принимает ключи она их могла принимать.

chmod +x appname.sh только сделать не забудь.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от nanosecond

А это уже к специалистам по ненужнод

anc ★★★★★
()
Ответ на: комментарий от nanosecond

как перенаправить логфайл в systemd сервис

[Unit]
Description=ZOMG why??!111

[Service]
ExecStart=/usr/bin/tail -F /tmp/zomg-log.txt
> journalctl -o cat -f --user-unit=zomg-log-reader.service
Started ZOMG why??!111.
Test 1234
Test 4312
vasily_pupkin ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.