У меня есть выделенный сервер (Ubuntu 12.04, без графического интерфейса), настроенный для запуска экземпляра McMyAdmin и подключения его к экземпляру экрана каждый раз, когда я перезагружаю аппаратное обеспечение. У меня есть команда, сохраненная в crontab root как:
@reboot cd /var/MC_SVR && screen -dmS McMyAdmin ./MCMA2_Linux_x86_64
Проблема в том, что у меня есть пользователь, настроенный специально для доступа по FTP к файлам сервера, поэтому мне не всегда нужно подключаться по SSH к машине , Поскольку сервер запускается как корневой процесс, все файлы, которые он создает, очевидно, устанавливаются с владельцем root.
Итак, я выбрал все файлы и установил их на ftpuser
. Теперь я застрял с попыткой запустить процесс как ftpuser. Я попытался сделать следующее, но безрезультатно:
cd /var/MC_SVR && su ftpuser - -c 'screen -dmS McMyAdmin ./MCMA2_Linux_x86_64'
Я пытаюсь сделать это в терминале и не получаю никаких ошибок или чего-либо (на самом деле я никогда ничего не получаю, если это не синтаксическая ошибка от su), но нет экземпляра экрана для доступа, поэтому я могу предположить, что сервер никогда не запускается.
Итак, что я делаю не так? Или я просто неправильно обращаюсь к экземпляру экрана, поскольку он (предполагается) должен быть запущен другим пользователем?
Одна из наиболее распространенных проблем с кроном - то, что он работает с минимальной оболочкой и минимальными переменными окружения. Из-за этого лучше всегда использовать полный путь для программ, двоичных файлов, освобождает, или файлы.
, Кроме того, хотя можно использовать su, sudo, IMO, лучший инструмент. Укажите пользователя с флагом-u.
Так, помещая его в целом,
sudo -u ftpuser "screen -dmS /var/MC_SVR/McMyAdmin /var/MC_SVR/MCMA2_Linux_x86_64"