LINUX.ORG.RU
ФорумAdmin

bash скрипт при запуске через systemd некорректно работает.

 ,


0

3

Имеется https://github.com/patsevanton/inotify-createrepo

Если запускать так

/usr/local/bin/inotify-createrepo -c /etc/inotify-createrepo.conf


то скрипт запустит createrepo первый раз.

Если копировать rpm в директорию /var/www/repos/rpm-repo, то реагирует и запускает createrepo.

Если запускать
systemctl start inotify-createrepo

то скрипт запустит createrepo первый раз.

Если копировать rpm в директорию /var/www/repos/rpm-repo, то НЕ реагирует.

В чем может быть ошибка?
  1. Запуск этого скрипта в виде /usr/local/bin/inotify-createrepo -c /etc/inotify-createrepo.conf не имеет смысла, так как все опции командной строки скрипт игнорирует. Путь к конфигу уже прописан в самом скрипте.
  2. Что говорит systemctl status inotify-createrepo после запуска?
  3. Для отладки попробуй добавить в скрипт такой кусок сразу после первой строки:
exec >>/tmp/script.log 2>&1
set -xu

И посмотри что появится в /tmp/script.log после запуска сервиса. Можешь проделать то же самое с запуском вручную и сравнить результат.

Насчёт корректности команды запуска inotifywait из самого скрипта ничего не скажу, так как man к нему мне в данный момент лень читать.

Deleted
()

Вангую при запуске через системду path пустой/куцый.

ya-betmen ★★★★★
()
Ответ на: комментарий от Deleted

Скрипт поправил. Абсолютные пути до бинарников поправил

Запускаю скрипт из консоли, смотрю /tmp/script.log

createrepo запускается и работает.

Если запускать через systemd, то

systemctl status inotify-createrepo
● inotify-createrepo.service - inotify-createrepo
   Loaded: loaded (/usr/lib/systemd/system/inotify-createrepo.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2019-07-26 08:36:53 MSK; 4s ago
 Main PID: 24345 (inotify-creater)
   CGroup: /system.slice/inotify-createrepo.service
           ├─24345 /bin/bash /usr/local/bin/inotify-createrepo
           └─24346 /usr/bin/inotifywait -mr -e create,modify,close_write,delete --exclude .repodata|.olddata|repodata /var/www/repos/rpm-repo/

Jul 26 08:36:53 dev-tools-webdav-nginx-apatsev1.test.russianpost.ru systemd[1]: Started inotify-createrepo.
Jul 26 08:36:53 dev-tools-webdav-nginx-apatsev1.test.russianpost.ru systemd[1]: Starting inotify-createrepo...

и при добавлении rpm createrepo не запускается.

Обвновленные скрипты тут https://github.com/patsevanton/inotify-createrepo

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

Если запускать в systemd вот такой скрипт

#!/bin/bash

exec >>/tmp/script1.log 2>&1
set -xu

while true;
do
  /usr/local/bin/inotify-createrepo
  echo $?
  sleep 2
done

то логи будут такие

+ true
+ /usr/local/bin/inotify-createrepo

То есть /usr/local/bin/inotify-createrepo запускается и не завершается.

chemtech
() автор топика

А если это всё на incron повесить? Добавить в скрипте фильтр, чтобы только на *.rpm запускал процедуру.

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

/usr/local/bin/inotify-createrepo запускается и не завершается

И не должен, у тебя там while true. Добавь к inotifywait ключи -s и -t 10, после этого попробуй перезапустить сервис, добавить файлы в репу и снова посмотреть systemctl status inotify-createrepo

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

То есть /usr/local/bin/inotify-createrepo запускается и не завершается.

Ну так возьми и добавь отладку к тому скрипту, который тебе нужно отлаживать! То есть в тот, который запускает inotifywait.

Deleted
()
Ответ на: комментарий от chemtech

Почему мои сообщения всегда читают жопой?

Добавить в скрипт фильтр, чтобы только на *.rpm запускал процедуру.

incron может передавать имя файла через параметры. В скрипте-враппере проверяешь расширение файла, если оно не rpm, то ничего не делаешь.

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

C incron не работал. Пытаюсь понять следующие примеры

https://serverfault.com/questions/282668/how-can-i-exclude-pattern-from-inoti...

https://stackoverflow.com/questions/6383021/how-can-i-exclude-pattern-from-in...

https://unix.stackexchange.com/questions/176209/how-to-monitor-create-a-txt-f...

<path> <mask> <command>
Where:

<path> is a filesystem path (each whitespace must be prepended by a backslash)
<mask> is a symbolic (see inotify.h; use commas for separating symbols) or numeric mask for events
<command> is an application or script to run on the events
The command may contain these wildcards:

$$ - a dollar sign
$@ - the watched filesystem path (see above)
$# - the event-related file name
$% - the event flags (textually)
$& - the event flags (numerically)
/var/mail IN_CLOSE_WRITE abc $@/$#


слишком замудренно
chemtech
() автор топика

Apache License для репы из пары конфигов и пары скриптов на несколько строчек, лол, не позорься и поменяй на MIT или BSD 2-clause.

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

Какая разница какая лицензия для для репы из пары конфигов и пары скриптов на несколько строчек ?

chemtech
() автор топика

Я посмотрел man inotifywait.

/usr/bin/inotifywait -mr -e create,modify,close_write,delete --exclude ".repodata|.olddata|repodata" "${REPO}" | /usr/bin/createrepo "${REPO}"

^ эта команда не имеет смысла. С этими опциями (-m) inotifywait просто выводит события на stdout и никогда не завершается. createrepo запускается сразу при запуске inotifywait, так как ты их соединил через пайп. Но при этом createrepo не умеет читать stdin, так что никакого полезного эффекта пайп тут не имеет. createrepo скорее всего отрабатыват один раз и завершается, а inotifywait остаётся висеть и выводить ивенты в пустоту.

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

А что мешает просто убрать -m и вызывать inotifywait и createrepo последовательно друг за другом в цикле?

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

А смысл? Скрипт работает.. Попробую, попозже

chemtech
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.