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.
Надеюсь это поможет.
С уважением,
Влад