Пользовательский incrontab не работает (только root) при incrond запускается как служба

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

zcat vcf.gz | awk \
   'BEGIN {
        RS = "[\t\v\f ]*(\r\n|\n\r|\r|\n)" ;
        FS = "[\t\v\f ]+"
    }

    /^[A-Za-z]/ {
        next
    }

    NF >= 4 {
        key = $4 ;
        sub(/:.*$/, "", key) ;
        seen[key]++
    }

    END {
        for (key in seen)
            printf "%s\n", key
    }'

Вы можете написать всю команду на одной строке (при этом удалите \ в конце первой строки), потому что я добавил все необходимые для этого точки с запятой.

Правило BEGIN устанавливает универсальную поддержку новой строки. Все пробельные символы в конце строк игнорируются, и любая форма новой строки (CR, LF, CRLF, LFCR) принимается как новая строка. Любое количество табуляций или пробелов рассматривается как разделители полей.

Правило /^[A-Za-z]/ применяется ко всем строкам, начинающимся с буквы. Правило next заставляет их игнорировать.

Следующее правило применяется ко всем записям (строкам), имеющим как минимум четыре поля. Четвертое поле копируется в переменную key, затем удаляется все, что находится после первого двоеточия (включая двоеточие). Полученное значение мы используем в качестве ключа ассоциативного массива seen. Значение, которое мы присваиваем, не имеет значения, но здесь seen[key] будет содержать количество раз, когда каждое значение было упомянуто (1 или более).

Правило END выполняется после обработки всех входных данных. Здесь цикл выполняет итерации по ключам массива seen[] (в неуказанном порядке) и просто печатает ключи.

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

2
20.06.2016, 22:14
2 ответа

Если в двоичном файле для incrontab (который я не знаю, никогда не использовал) не установлен бит SGID, это может вызвать странное поведение такого типа.

Установите его с помощью chmod g + s / path / to / binary (/ usr / bin / incrontab, возможно?)

Вы можете проверить, установлено ли оно с помощью:

ls -l / path / to / binary

(пример)

ls -l /usr/bin/crontab
-rwxr-s--x 1 root crontab 44336 Jun 23 18:47 /usr/bin/crontab
0
27.01.2020, 22:46

Я столкнулся с похожей проблемой (, вот как я нашел этот вопрос ).

Если следующая команда работает,

incrontab -n

проблема может заключаться в том, что служба incron/incrond не запущена. Проверьте, работает ли он и включен ли он для запуска при загрузке (в случае перезапуска системы ).

Другая проблема, с которой я столкнулся, была связана с бесконечным циклом, который я случайно создал.
Если ваш скрипт изменяет какой-либо файл в той самой папке, за которой наблюдает incron, он продолжает запускать события, и каждое событие вызывает новый процесс (черезfork()). Вскоре сервис больше не сможет разветвляться. Журнал обслуживания показывает следующую ошибку в этом случае.

cannot fork process: resource temporarily unavailable

В этот момент

  • остановить службу
  • изменить сценарий, чтобы он не изменял файлы в отслеживаемой папке
  • перезапустить службу
0
09.09.2020, 13:49

Теги

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