
У меня есть скрипт python, который предоставляет RESTful-сервис (используя фреймворк flask). Я хотел бы, чтобы этот сервис клонировал новейшую версию скрипта python, а затем запускал main.py.
Мне ясно, что он может быть запущен на уровне инициализации 3, однако я не уверен, как именно должна быть настроена информация об инициализации, а также не уверен, можно ли обновлять crontab с помощью
sudo update-rc.d myservice enable 3
на самом деле в скрипте myservice содержится что-то вроде:
#!/bin/sh
rm -fR /home/pi/myservicedir
git clone https://repo/code.git /home/pi/myservicedir
cd /home/pi/myservicedir
python main.py
решение1
Ваш скрипт не является правильным init.d
скриптом. Возможно, в нем есть файл шаблона, /etc/init.d
который вы можете использовать для создания своего стартового скрипта. В противном случае просмотрите некоторые другие скрипты в , /etc/init.d
чтобы найти шаблон, используемый вашим дистрибутивом.
В качестве альтернативы, rc.local
is обычно запускается очень поздно в цикле загрузки. Это было бы подходящим местом для размещения вашего кода запуска. Проверьте значение $1
is start
перед запуском вашего кода.
Серверы запускаются в порядке, указанном в /etc/rc3.d
. Сначала запускаются скрипты kill K
в лексическом порядке, затем запускаются скрипты start S
в лексическом порядке. Если вы хотите быть уверены, что все запущено, используйте порядок запуска 99
.
Ваш дистрибутив должен иметь метод установки и удаления ссылок в rc#.d
каталогах. В вашем случае это, по-видимому update-rc.d
, . Обычно это контролируется строками комментариев в верхней части скрипта init.d
.
Должны быть man
страницы с описанием программ и файлов, которые вам нужны. Попробуйте запустить man update-rc.d
и man -k init
.
решение2
Укажите $network, например так:
#!/bin/bash
### BEGIN INIT INFO
# Provides: mountftp
# Required-Start: $remote_fs $syslog $network
# Required-Stop: $remote_fs $syslog $network
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Mount disk2
# Description: Mount disk2
### END INIT INFO