2013-09-09 2 views
1

Я использую малину Pi в качестве (очень простой) домашней метеостанции.Лучший способ запланировать команду Django, которая нуждается в корневом доступе

В настоящее время у меня есть небольшой скрипт python, который при запуске считывает температуру и публикует результат в виде новой строки в Google Spreadsheet с помощью API Документов Google. Этот скрипт python должен запускаться от имени root, и в настоящее время я получаю хорошие результаты, планируя этот скрипт каждый час запускать crontab суперпользователя.

Я также только что получил этот Pi для запуска Nginix и uWsgi для обслуживания веб-сайтов, работающих на Django, и я хотел бы начать регистрацию температур в локальной базе данных в дополнение к Google Spreadsheet. Я хотел бы сделать это через ORM Django, так как это то, с чем я больше всего знаком.

У меня есть две конкретные цели:

  1. Выставьте регулярно запланированную задачу, которая будет как опубликовать вновь принимать показания температуры в локальной БД (с использованием Django ORM), а также электронную таблицу Google.
  2. Закажите веб-страницу (предположительно, требующую входа в систему), которая позволит удаленным пользователям «считывать данные о температуре сейчас» и как сообщать результат обратно (через веб-страницу), так и вставлять результат в серверную БД.

Мой вопрос: что является лучшим способом сделать это, зная, что любой код, который будет обращаться к температурному зонду, должен выполняться как root?

Для # 1, я думаю, вопрос сводится к: как лучше всего загружать среду python, которая «похожа на оболочку Django» тем, что она может легко делать все те же импорт (в частности, такие как ORM)? Если бы я мог это сделать, я мог бы написать новый скрипт, который будет выполнять как загрузку таблиц, так и запись в DB. Могу ли я/должен ли я это сделать с помощью команды «Django», которую затем планируется запустить в crontab суперпользователя? Или я должен делать это с помощью обычного старого скрипта python, который идет вперед и загружает правильные Django-специфические модули?

Для № 2 я искал предложения о том, как обращаться с проблемой «должен работать как корень» для показаний датчика температуры. Я явно не хочу запускать весь процесс Django как root. Итак, какие у меня лучшие варианты?

Спасибо.

ответ

1

django-celery - это определенно стоит поискать запланированные задачи.

+0

Спасибо за предложение. У вас есть ссылка, на которую я мог бы обратить внимание, как запустить задачи celery с правами root? – 8one6

+0

Это не то, что я сделал сам, но в разделе [этот раздел] (http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html#starting-the-worker-process), он говорит о том, чтобы запустить работника сельдерея в качестве деамона, который, я думаю, вы можете дать коренной доступ. –

+0

Из того, что я читал, Сельдерей на самом деле слишком завышен. Я думаю, что я больше склоняюсь к созданию исполняемого сценария оболочки и позволяю ему (и только ему) запускаться как root через файл sudoers. Но это не то, что я сделал, и мне бы хотелось услышать от всех, кто занимался подобным делом в прошлом. В более общем плане, я все еще хотел бы услышать «лучший» способ написать код Python, который может получить доступ к ORM Django. Это просто запуск сценария с помещением соответствующего каталога на путь python, а затем импорт в обычном режиме? – 8one6