Проблема с incrontab: не работает после перезагрузки

компьютеры Linux incrontab

incrontab не работает после перезагрузки системы. После того, как я перезапускю его (incrontab -d) или перезапускаю его сервис (sudo /etc/init.d/incron restart) начинает работать нормально. Интересно, что просто запуск службы (sudo /etc/init.d/incron start) ни к какому результату не приводит.

Что-то "подвешивает" службу? Какие возможны варианты решения проблемы?

PSУ меня Linux Mint 6 (аналог Ubuntu 8.10).
PPS Скрипт (/etc/init.d/incron) не редактировал.

Примечание:
Посмотрел syslog.
Ни при запуске системы, ни после комманды sudo /etc/init.d/incron start никаких записей, содержащих incron в логе нет.
После sudo /etc/init.d/incron restart
появилось:
Mar 16 18:32:45 desktop incrond[3966]: stopping service
Mar 16 18:32:46 desktop incrond[8679]: starting service (version 0.5.7, built on Oct 30 2007 05:35:47)
Mar 16 18:32:46 desktop incrond[8680]: loading system tables
Mar 16 18:32:46 desktop incrond[8680]: loading user tables
Mar 16 18:32:46 desktop incrond[8680]: loading table for user username
Mar 16 18:32:46 desktop incrond[8680]: cannot create watch for user username: (16) Device or resource busy
Mar 16 18:32:46 desktop incrond[8680]: ready to process filesystem events

Примечание:
>huge
>Выяснить, что за user.

user это я. с паролями и правми всё нормально, так как запустить его я могу и работает он нормально.

Примечание:
> cannot create watch for user username: (16) Device or resource busy
> Вот, что-то с выделением ресурсов.
Не думаю. Дело в том что ПОСЛЕ этого он начинает работать. Непонятно почему он не начинает работать сразу после загрузки и почему не реагирует на start.

Примечание:
Спасибо за объяснения.
команда sudo update-rc.d -f incron defaults выдаёт:
System startup links for /etc/init.d/incron already exist.
Что касается проблемы с ресурсами, то никаких записей, кроме приведённой, в логе просто нет. К тому же речь там идёт не о правах, а о том, что ресурс чем-то занят. В ту же секунду incrond начинает работать.
По поводу всего остального надо ещё разобраться...

Примечание:
Проверил /var/run , нашёл incrond.pid, удалил его, перезагрузился, не работает.
после sudo /etc/init.d/incron stop incrond.pid исчез
после sudo /etc/init.d/incron start incrond.pid появился и incron начал работать.
Видимо, какая-то проблема с некорректным завершением, хотя я перезагружаю комп через стандартные средства, провод не выдёргиваю...

Примечание:
>Ok причину нестарта выяснили.
Это да. Но важнее найти причину "неработы"

> Что значит "не работает"? Какая симптоматика? Процесс запущен?
"Не работает" - значит не делает то, что должен делать incron: не реагирует на inotify, в частности на IN_ALL_EVENTS

> Сделайте: $ ps aux|grep incron|grep -v grep
Сделал: root 4527 0.0 0.0 3276 1180 ? Ss Mar17 0:00 /usr/sbin/incrond -f /etc/incron.conf

>Или, попробуйте пустить incron не демоном, а в foreground:
>$ sudo incrond -n
при попытке запуска сообщает, что
another instance of incrond already running
после останова процесса (sudo /etc/init.d/incron stop) начинает нормально работать, но все сообщения в терминале относятся к работе тех программ, которые вызываются incron (unison синхронизирует папки, которые изменились - я копирую туда тестовый файл, а потом его удаляю), ничего сугубо инкроновского там нет.

>Если внятных сообщений диагностики ошибок разработчик не предусмотрел, запустите планировщик через sctrace:
>$ sudo strace incrond -n | less -i +/"cannot create watch for user"
Вывод был невменяемый. Нажал Ctrl + C, в терминалке осталось только:
execve("/usr/sbin/incrond", ["incrond", "-n"], [/* 15 vars */]) = 0
brk(0) = 0x8796000
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
mmap2(NULL, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb80b0000
access("/etc/ld.so.preload", R_OK) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=78490, ...}) = 0
mmap2(NULL, 78490, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb809c000
close(3) = 0
access("/etc/ld.so.nohwcap", F_OK) = -1 ENOENT (No such file or directory)
open("/usr/lib/libstdc++.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0 B\4\000"..., 512) = 512
fstat64(3, {st_mode=S_IFREG|0644, st_size=950392, ...}) = 0
mmap2(NULL, 972972, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0xb7fae000
mmap2(0xb8091000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0xe3) = 0xb8091000


> после sudo /etc/init.d/incron stop incrond.pid исчезпосле sudo /etc/init.d/incron start incrond.pid появился и incron начал работать.
>То есть, вопрос исчерпан, я правильно понял?
Исчерпан до очередной перезагрузки.

Примечание:
Вывод в файл не перенаправляется. Всё идёт на экран. В случае, если incrond уже запущен единственная сообщение об ошибке связано с тем, что в памяти уже есть этот процесс. Если процесс остановить и запустить strace заново, то вывод на экран в какой-то момент прекращается и ждёт ввода (сообщения об ошибке нет). Последние строки:
rt_sigaction(SIGTERM, {0x804a850, [TERM], SA_RESTART}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGINT, {0x804a850, [INT], SA_RESTART}, {SIG_DFL}, 8) = 0
rt_sigaction(SIGCHLD, {0x804a850, [CHLD], SA_RESTART}, {SIG_DFL}, 8) = 0
time(NULL) = 1237483701
stat64("/etc/localtime", {st_mode=S_IFREG|0644, st_size=3661, ...}) = 0
send(3, "<77>Mar 19 17:28:21 incrond[1298"..., 70, MSG_NOSIGNAL) = 70
poll(

Я его "убиваю".

Не думаю, что так удастся найти ошибку, потому что если incrond перезапущен, то он работает без проблем. Проблема где-то в самом начале, когда система только запускается. Я эту проблему временно решил, добавив в crontab задание перезапускать incrontab сразу после загрузки. Но загадочные "подземные стуки" так и остались загадочными...
Ответы:
Причины подземных стуков всегда остаются неизвестными. Чтобы понять причины неработоспособности сервисов дают их логи.
Рекомендую сделать добавление с логами старта, только тогда можно будет говорить о чём-то определённом.
> cannot create watch for user username: (16) Device or resource busy
Вот, что-то с выделением ресурсов.
Сделать:
$ grep 16 /etc/passwd
Выяснить, что за user.
> user это я. с паролями и правми всё нормально, так как запустить его я могу и работает он нормально.
Где же нормально, если ему(процессу), запущенному от твоего имени, твоих прав не хватает на получение какого-то ресурса/девайса, о чём incron и говорит?
> Проверил /var/run , нашёл incrond.pid,
Ok причину нестарта выяснили.
> Вывод был невменяемый. Нажал Ctrl + C, в терминалке осталось только:
Перенаправьте вывод в файл, а потом найдите в нём сообщение об ошибках выделения ресурсов. Например:
$ sudo strace incrond -n > /tmp/strace.log
И потом уже рассматривайте на предмет ошибок:
$ less  /tmp/strace.log
Искать по (под)строке указанной выше... что-то вроде "cannot create watch for user username: (16) Device or resource busy"


15 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.