почему я не могу запустить программу напрямую из cron?

почему я не могу запустить программу напрямую из cron?

В настоящее время я настраиваю 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, в зависимости от вашей системы.

Связанный контент