В настоящее время у меня есть VPS с установленным Centos7. У меня также есть запрограммированный « Steambot », который я хотел бы установить на VPS, и он будет автоматически запускаться постоянно, когда VPS находится в сети. Я не уверен, как это сделать, исследовал и заметил из поста в /r /SteamBot subreddit, что для VPS необходим моно для этого. Не уверен скорее или нет, что это правда или нет, что привело меня сюда.
2 ответа
Сначала запустите его "вручную". Если вы еще этого не сделали, установите epel и mono и заставьте бот работать. Вам нужно написать что-то, что запустит команду и продолжит ее работу.
Напишите сценарий инициализации, чтобы запустить его. Centos 7 использует systemd, что позволит вам делать такие аккуратные вещи, как автоматический перезапуск. Я не погружался в systemd сам, но это хорошо документировано.
Я обычно использую метод supervisord. Это не системный уровень. будет перезапускать вещи при сбое, и имеет дополнительный веб-интерфейс
Ваш сценарий супервизора так же прост, как
command=command to run steambot
directory=directory you want to run steambot in
autostart=true
startretries=5
stderr_logfile=/var/log/supervisor/ttrss/ttrss.err.log
user=www-data
Это регистрирует ошибки, и Вы можете добавить строку для регистрации стандартного вывода в целях устранения неполадок.
- Добавьте его в ваш crontab, если это не интерактивное приложение (иначе оно становится сложнее). @reboot запустит его один раз при перезагрузке, но другие методы лучше, так как они регистрируются и перезагружаются при ошибке
Самое простое - написать сервис systemd. Systemd обладает очень широким спектром возможностей, и вы не указали, чего хотите, поэтому я дам вам очень простой скрипт:
[Unit]
Description=Some comment here about what this does
After=network.target
[Service]
EnvironmentFile=-/path/to/flag/setting/file
ExecStart=/absolute/path/to/executable $FLAGS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
User=%i
Group=users
[Install]
WantedBy=multi-user.target
Переменная $ FLAGS должна быть установлена в файле /path/to/flag/setting/file
, если это сложный выбор, в противном случае просто удалите эту строку и замените приведенную ниже на
ExecStart=/absolute/path/to/executable -i -f -d
или какие флаги вам нужны. Выше следует поместить в файл с именем myservice@.service
. Таким образом, это можно назвать
systemctl myservice@MyName.service
и исполняемый файл будет запущен от имени пользователя MyName. Вы должны поместить вышеуказанный файл в /etc/systemd/user
, чтобы он запускался как пользовательская служба, а не как системная служба. Преимущество этого в том, что его может запустить любой пользователь, а не только root. Вы всегда можете управлять им с помощью systemctl --user
.
Если вместо этого вам не нужно, чтобы другие пользователи могли запускать службу, используйте строку
User=MyName
сохраните файл в myservice.service
и управляйте им, не передавая аргумент, как systemctl myservice ...