Я предполагаю, что я мог бы запускать задание cron каждую минуту или 5 минут и каким-то образом проверять, запущен ли уже процесс (не знаю, как это сделать).
Будет ли это лучший способ, или в моем домашнем каталоге есть другой сценарий, подобный .startup, в который я мог бы поместить сценарий?
Проблема здесь, похоже, в том, что у вас нет корневого доступа на этом хосте для изменения сценариев запуска системы, таких как /etc/rc.local
. Идея использования @reboot
строку в вашем пользовательском crontab стоит изучить. Я не пробовал это как обычный пользователь, но это должно работать.
Другая идея, как вы говорите, - запускать что-то в вашем пользовательском crontab каждые несколько минут, проверять, запущен ли ваш процесс, и перезапускать, если нет. Например:
*/5 * * * * ps -u $USER | grep myscript >/dev/null || $HOME/bin/myscript
будьте очень осторожны с подобными вещами - если вы сделаете ошибку, вы будете запускать дополнительную копию своей программы каждые 5 минут, что в конечном итоге может вызвать множество проблем.
вы можете использовать chkconfig - или быть ленивым и просто запустить в своем crontab
@reboot команда идет сюда
Эта ссылка может вам очень помочь (избавляет меня от необходимости печатать все ... конечно)
http://linuxhelp.blogspot.com/2006/04/enables-and-dispting-services-during_01.html
В зависимости от вашего дистрибутива (вы не упомянули об этом) у вас есть довольно широкий выбор: chkconfig, rcconf, /etc/(rc.d/)rc.local, символьные сценарии запуска в init.d \ rc.d - но все это требует привилегий root.
Я предполагаю, что у вас нет доступа к sudo. Это оставляет вам только один вариант, добавляя скрипт в crontab, который проверяет, запущен ли процесс, а если нет, то запускает его. Вы также получаете своего рода повышение доступности (например, если ваш процесс дает сбой, он запускается снова).
Я так понимаю:
#!/bin/sh
proc=process_name
`ps aux > /tmp/.$proc; awk '/$proc/{print $2}' /tmp/.$proc > /tmp/.x` #if process is alive then copy its PID in .x
if [ -s /tmp/.x ]; then #-s file True if file exists and has a size greater than zero.
echo k #.x is greater than zero => process is alive, all ok
else
/etc/init.d/daemon start _or_whatever_startup file_ #.x was zero, process dead.
fi
`rm -f /tmp/.$proc && rm -f /tmp/.x`