password22
@password22

Как в crontab ubuntu перезапускать сервис?

Куча статей и видео как запускать crontab в ubuntu, скрипт и так далее.

Но как мне сделать перезапуск моей собственной службы, то есть службы, которая отвечает за сайт?

Я пробовал
sudo crontab -e
добавила туда 0 4 * * * sudo systemctl restart mySite.service


Потом пробовал
sudo nano /etc/cron.hourly/testHourly
0 4 * * * sudo systemctl restart mySite.service

Не очень понимаю как сделать перезапуск службы раз в день...
  • Вопрос задан
  • 5371 просмотр
Решения вопроса 1
password22
@password22 Автор вопроса
В моем случае пришлось сделать вот что.

Чтобы перезапускать сайт на asp.net по таймеру пришлось создавать отдельно таймер + сервис + скрипт перезапуска.

То есть в итоге должно быть:
  1. site.service -сам сервис запуска сайта ​
  2. siteRestart.service - сервис, ссылающийся на скрипт с перезапуском
  3. siteRestart.timer - таймер для сервиса перезапуска
  4. siteRestart.sh - скрипт с перезапуском


site.service
[Unit]
Description=Example .NET Web API App running on Ubuntu

[Service]
WorkingDirectory=/var/www/helloapp
ExecStart=/usr/bin/dotnet /var/www/helloapp/helloapp.dll
Restart=always
# Restart service after 10 seconds if the dotnet service crashes:
RestartSec=10
KillSignal=SIGINT
SyslogIdentifier=dotnet-example
User=www-data
Environment=ASPNETCORE_ENVIRONMENT=Production
Environment=DOTNET_PRINT_TELEMETRY_MESSAGE=false

[Install]
WantedBy=multi-user.target


siteRestart.service
[Unit]
Description=siteRestartService

[Service]
Type=simple
ExecStart=/usr/local/bin/siteRestart.sh

[Install]
WantedBy=multi-user.target


siteRestart.timer
[Unit]
Description=RestartSiteDaily

[Timer]
OnCalendar=daily
Unit=siteRestart.service
Persistent-true

[Install]
WantedBy=multi-user.target


siteRestart.sh
#!/bin/bash
systemctl restart site.service


далее

sudo chmod 744 /usr/local/bin/siteRestart.sh
sudo chmod 644 /etc/systemd/system/siteRestart.service

sudo systemctl daemon-reload

sudo systemctl start siteRestart.service siteRestart.timer

sudo systemctl enable siteRestart.service siteRestart.timer

sudo systemctl status siteRestart.service siteRestart.timer

Только так всё заработало!
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@Drno
sudo crontab -e
0 0 */1 * * systemctl restart mySite.service

минуты часы день месяц год
0 минуту - 0 час - *(каждый)/1(один) день - * (любую неделю) - * (любой месяц)

вот так в 23:30 каждый день
30 23 */1 * *

если скрипт надо запускать от sudo то добавлять надо в крон rootA , а не в свой пользовательский. потому что скрипт с правами sudo из крона он не запустит
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы