Raspberry pi Jessie: запустите source ~/.profile и работайте cv при запуске

Я установил Raspbian Jessie на Raspberry Pi 2, а затем добавил virtualenv и установлен python3 а также opencv3, Теперь я хотел бы сделать скрипт Python работоспособным при запуске. Некоторое время назад у меня был Raspberry pi, работающий без virtualenv, и автоматический запуск был простым, с помощью cron; в crontab Я добавил строку, которая будет запускаться при перезагрузке, которая запускает python со скриптом, который мне нужен.

В настоящее время мне нужно сделать следующее:

  • Начните ~/.profile
  • Workon Cv
  • python3 my_script.py

Я попытался создать скрипт sh, содержащий три строки здесь выше. При запуске этого ш, у меня есть сообщение, что .profile не существует

Здесь ниже вывод некоторых тестов: я создал sh с именем "start_monitoring.sh", содержащий следующее:

#!/bin/bash

echo "This script is about to run another script."
source ~/.profile

# workon cv
# python3 monitoring_daemon.py -c conf.json

При запуске этого sh из терминала SSH с использованием "bash ./start_monitoring.sh", я получил этот вывод

~$ bash ./start_monitoring.sh

Этот скрипт собирается запустить другой скрипт.

: No such file or directory 3: /home/pi/.profile***

Я не понимаю почему .profile не найден в этом контексте. Что я должен делать?

1 ответ

Если виртуальная среда, в которой вы собираетесь запустить сценарий, создана под учетной записью пользователя (например, "pi"), то файл crontab необходимо отредактировать для того же пользователя. Вы можете проверить в терминале, что среда находится в домашнем каталоге / pi / и, следовательно, создана пользователем pi:

$ cd ~/.virtualenvs
$ dir

Если это так, используйте следующую команду для редактирования crontab:

$ crontab -e

В первый раз он создает crontab специально для пользователя pi. Если$ sudo crontab -e используется, то crontab создается для суперпользователя и не активирует виртуальную среду.

Моя команда crontab была следующей:

@reboot /home/pi/project_folder/autostart_script.sh >> /home/pi/project_folder/reboot.log 2>&1

autostart_script был таким:

#!/bin/bash
source /home/pi/.profile
workon environment_name
cd /home/pi/project_folder
python python_script.py

Необходимо сделать его исполняемым командой в терминале:

$ chmod +x autostart_script.sh

Наконец, python_script должен был просто регистрировать событие:

import os
from datetime import datetime
log_file = open("/home/pi/project_folder/log.txt", "w")
log_file.write(str(datetime.now()) + " :: " + "it is working")
log_file.close()

После перезагрузки он должен создать два файла в project_folder. Пустой файл reboot.log и log.txt с надписью "работает".

Я попытался создать cron, и я добавил несколько журналов, чтобы понять эту проблему.

Причина заключается в том, что virtualenv не может использоваться в качестве пользователя root, поскольку он был создан как другой пользователь.

Одним из решений является запуск cron от имени пользователя, который virtualenv хорошо работает или активирует virtualenv, выполнив:

, /home/pi/.virtualenvs//bin/activate

где среда, которую вы хотите включить.

Другое решение (пока не подтвержденное) заключается в создании cron для пользователя, который может использовать virtualenv.

Надеюсь это поможет.

С уважением,

Влад

Другие вопросы по тегам