1

В настоящее время я настраиваю Raspberry Pi с Debian Wheezy в качестве IRC-сервера. Обычный пользователь запускает две программы при загрузке - ngircd и atheme.

ngircd и atheme регистрируются в /var/log/syslog

ngircd запускается из самого исполняемого файла (/usr/local/sbin/ngircd ), как и Atheme (/home/user/atheme/bin/atheme-services). Запуск программ от пользователя вручную из терминала работает без проблем.

Когда я пытаюсь запустить ngircd (используя расположение, в котором он установлен) из cron, он просто не запускается - /var/log/syslog говорит, что задание cron выполнено, но ничего не происходит, нет сообщений об ошибках или ngirc связанные журналы на всех. Atheme начинается хорошо.

Однако, если я создаю скрипт, который ничего не делает, но запускает ngird (используя тот же путь, который я использовал ранее), и добавляю его в cron, он работает нормально (как и при непосредственном запуске). Почему ngircd не начинается с cron?

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

2 ответа2

1

У меня нет права комментировать, поэтому я не могу просить разъяснений, но я бы предложил запустить демон либо из initscript, либо из rc.local, а не из cron. Крон обычно используется, чтобы выполнять вещи в определенное время, регулярно. Обработка демонов и сервисов обычно является задачей вашей системы инициализации.

Чтобы запустить что-то как обычный пользователь при загрузке:

Добавьте это в /etc/rc.local :

/bin/su -c '/path/to/your/executable args &' -s /bin/bash username >/dev/null 2>&1
0

Cron запускает что-то, что ведет себя так же, как

sudo - user /path/to/command

или же

su user
/path/to/command

Если вы хотите проверить, выполняется ли ваша команда, вы должны проверить ее таким образом.

Вы можете отредактировать пользовательский crontab с помощью

crontab -e

или общесистемный crontab как root с

nano /etc/crontab

или ваш любимый редактор, отличный от nano (при необходимости добавьте sudo ). Обратите внимание, что эти два crontab отличаются по синтаксису в том, что общесистемный crontab имеет дополнительный столбец между временем выполнения и командой, который указывает пользователю, как выполнять команду. Вы хотите, чтобы время выполнения было установлено на @reboot:

@reboot user /usr/local/sbin/ngircd
@reboot user /home/user/atheme/bin/atheme-services

Просто удалите слово user если вы редактируете пользовательский crontab с помощью crontab -e .

В качестве альтернативы вы можете использовать initscripts или файлы управления службами System V, в зависимости от вашей системы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .