
В настоящее время я настраиваю 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?
Это не большая проблема, но это делает систему немного более грязной, чем мне бы хотелось. Также странно, что две программы ведут себя по-разному
решение1
У меня нет привилегии комментировать, поэтому я не могу просить разъяснений, но я бы предложил запускать демон либо из initscript, либо из rc.local, а не из cron. Cron обычно используется для выполнения вещейв определенное время, регулярно. Управление демонами и службами обычно является работой для вашегосистема инициализации.
Чтобы запустить что-либо от имени обычного пользователя при загрузке:
Добавить это к/etc/rc.local:
/bin/su -c '/path/to/your/executable args &' -s /bin/bash username >/dev/null 2>&1
решение2
Cron запускает что-то, что ведет себя точно так же, как
sudo - user /path/to/command
или
su user
/path/to/command
Если вы хотите проверить, выполняется ли ваша команда, вам придется протестировать ее следующим образом.
Вы можете либо отредактировать user-crontab с помощью
crontab -e
или общесистемный crontab каккореньс
nano /etc/crontab
или ваш любимый редактор, кроменано(добавьте 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 или файлы управления службами systemd, в зависимости от вашей системы.