Как перезапустить сервис каждый час, в upstart?

5746
Xiè Jìléi

У меня есть сервис выскочки, определенный как:

/etc/init/sshproxy.conf

description "Lenik's secret tunnel thru *.ssh.myserver.com" author "谢继雷 (Lenik)"  start on (net-device-up IFACE!=lo) stop on runlevel[!2345]  script  # -T disable pseudo-tty allocation # -f go to background after login but before command exec # -n stdin from /dev/null, must be used when ssh is run in bg. # -N no command # -D "dynamic" app-level port forwarding. sudo -usshproxy ssh -qTfn -ND *:7878 ssh.myserver.com  end script 

Но через несколько часов ssh-туннель кажется зомбированным, поэтому я хочу перезапускать его каждый час, как это сделать в этом файле .conf, или мне следует написать другую работу cron.hourly?

2

2 ответа на вопрос

5
whitequark

Хотя «события, генерируемые через определенные промежутки времени» являются запланированной функцией в Upstart, она пока не готова предоставить это. Таким образом, вы должны написать простой скрипт, как это:

#!/bin/sh service sshproxy restart  

И положить его в /etc/cron.hourlyпапку. Не забудьте установить исполняемый бит ( chmod +x /etc/cron.hourly/whatever.sh), иначе он не запустится.

Работают ли пользовательские скрипты cron в режиме sudo? Xiè Jìléi 13 лет назад 0
Нет, они запускаются как пользователь, которому они принадлежат, то есть, как если бы вы вызывали их вручную из терминала, когда вы вошли в систему как этот пользователь. whitequark 13 лет назад 0
Как и большинство Upstart, это запланированная функция. Это действительно классная идея, но пока не реализована. Tim Williscroft 13 лет назад 0
@Tim, Upstart в настоящее время прекрасно заменяет `init`, и все его запланированные функции фактически заменяют другие демоны Unix. whitequark 13 лет назад 0
Вы также можете поместить initctl emit a_custom_event в cron и добавить или a_custom_event к стартовой строке в задании upstart. nafg 10 лет назад 0
2
Gilles

Вместо того, чтобы перезапускать службу через фиксированные интервалы, вы можете перезапустить сервис, когда соединение разорвется. Передайте ServerAliveIntervalопцию, чтобы ssh быстрее обнаруживал разрыв соединения. Используйте respawnдирективу в сценарии Upstart для автоматического перезапуска туннеля. В качестве альтернативы, используйте программу перезапуска туннеля ssh, такую ​​как autossh .

Отличная информация! Xiè Jìléi 13 лет назад 0

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