Если ваше приложение Ruby конфликтует со службой httpd
, я не понимаю, почему вы должны поддерживать работу этой службы только для того, чтобы остановить ее в своемrun.sh
:просто запустите systemctl disable httpd
один раз, и она даже не будет запущена.
Теперь вы можете полностью удалить свой run.sh
и создать свой служебный файл с Type=simple
и ExecStart=/full/path/to/rails s -p 80
. Обратите внимание на удаление опции -d
; это сделано намеренно и хорошо работает с Type=simple
.
Для страховки вы можете добавить Conflicts=httpd.service
, чтобы сообщить systemd
, что ваша служба и httpd
не могут работать одновременно.
Итак, ваш /etc/systemd/system/my-ruby-application.service
должен выглядеть так:
# Start the ruby on rails app on boot
[Unit]
Description=Start Ruby Online Ordering Application
Conflicts=httpd.service
[Service]
Type=simple
Username=root
PIDFile=/home/deviant/www/tmp/pids/server.pid
WorkingDirectory=/home/deviant/www
ExecStart=/some/full/path/rails s -p 80
TimeoutSec=300
[Install]
WantedBy=multi-user.target
Чтобы заставить systemd
перезапустить службу в случае сбоя по какой-либо причине, добавьте параметр Restart=
, соответствующий вашим требованиям (см. Таблицу 2 вman systemd.service
). Если вы это сделаете, рекомендуется также добавить RestartSec=<sensible restart delay>
, чтобы избежать зависания вашего сервера с повторными попытками перезапуска с интервалом 0,1 с (по умолчанию ), если ваша служба продолжает сбой после каждой попытки перезапуска, возможно, потому что вы редактировали его конфигурационный файл и случайно допустили ошибку.
После того, как вы отредактировали файл my-ruby-application.service
, вы должны запустить systemctl daemon-reload
, затем systemctl disable httpd
и systemctl stop httpd
, если вы еще этого не сделали, и, наконец, systemctl enable my-ruby-application
и systemctl start my-ruby-application
.
Я не получил того, что вы получили с помощью вашей команды date
, так что я могу ошибаться насчет того, что вы хотите.
Чтобы сгенерировать время между 00 :00 :20 и 10 :10 :00 с помощью GNU date
, вы можете сделать:
время начала:
$ date --date "1970-01-01 00:00:20" '+%T'
00:00:20
время окончания (36580 секунд спустя):
$ date --date "1970-01-01 00:00:20 36580 sec" '+%T'
10:10:00
нечто среднее:
date --date "1970-01-01 00:00:20 $(shuf -n1 -i0-36580) sec" '+%T'