Может ли upstart обрабатывать символические ссылки на конфигурационные файлы?

30

У меня все мои файлы конфигурации выскочки под контролем версий. Мой идеальный способ использовать upstart - создавать мягкие ссылки из моего репозитория управления версиями (mercurial - не то, чтобы это имеет значение) в / etc / init, но upstart не видит задания. Все хорошо, если я копирую файлы из каталога репозитория в / etc / init.

Кто-нибудь знает, почему выскочка не справляется с символическими или даже жесткими ссылками?

Благодарность

Крис

Крис МакКоли
источник
1
Возможно, это было дизайнерское решение со стороны разработчиков Upstart, чтобы игнорировать мягкие ссылки? В любом случае, если ваш репозиторий находится в том же разделе, что /etc/initи попробуйте использовать жесткие ссылки.
Стивен Понедельник
Пробовал жесткие ссылки, и это тоже не сработало :-(
Крис МакКоули
Ламе. Действительно, символические ссылки игнорируются без ручного вызова для перезагрузки конфигурации. Вздох. Я предпочитаю символические ссылки. Очиститель в моем случае использования. Ну что ж. Я просто скопирую файлы, как придурок.
Джеймс Т Снелл

Ответы:

9

Upstart не поддерживает символические ссылки, поскольку они могут указывать на файл в разделе, который не загружается во время загрузки .

Я справился с этим в своем собственном проекте, поместив файлы conf в / etc / init / myscripts и затем связав это с каталогом в моем репозитории. mount --bind /etc/init/myscripts ~/code/repo/initscripts,

Добавьте это в / etc / fstab, и привязка будет постоянной:

/etc/init/myscripts  /home/me/code/repo/initscripts      none    bind

Это эффективно дает вам жестко связанные каталоги. Upstart будет относиться к файлам conf как к любому другому, потому что они локальны для / etc / init. Ваша DVCS также будет видеть их как локальные файлы в репозитории, поэтому она будет также обрабатывать их, как и любые другие файлы, хранящиеся там. Лучшее обоих миров.

Александровский сад
источник
49

Upstart просматривает свои каталоги конфигурации с помощью inotify и перезагружает конфигурацию, когда любой из файлов изменяется или добавляется новый файл. Очевидно это не работает для символических ссылок.

Для ручного обновления конфигурации используйте

$ initctl reload-configuration
Фабиан Якобс
источник
Раньше это работало надежно для меня. в последнее время на upstart 1.3 он работает только на остановленных заданиях.
jcomeau_ictx
2
Для меня символические ссылки в / etc / init / work, но если я изменю файл за символической ссылкой, файл не перечитывается инструментами выскочки. Мне потребовались часы, чтобы выяснить, что символическая ссылка является причиной. Он действует как кеш, который никто не хочет иметь.
Песчу
1

Как упоминалось ранее:

initctl reload-configuration

Однако, если вы получаете сообщение об ошибке, подобное следующему:

initctl: Rejected send message, 1 matched rules; type="method_call", sender=":1.155" (uid=1000 pid=6177 comm="initctl reload-configuration ") interface="com.ubuntu.Upstart0_6" member="ReloadConfiguration" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

Вы должны вызвать sudo:

sudo initctl reload-configuration
Карл Моррисон
источник