Я новичок в выскочке и хотел бы знать, есть ли способ указать выскочке выполнять определенную команду только при запуске системы, а не при последующем перезапуске приложения из командной строки. Например, у меня следующая конфигурация выскочки:
#!upstart
description "Hello World"
author "me"
start on (local-filesystems and net-device-up)
stop on shutdown
script
export HOME="/root"
echo $$ > /var/run/hello-world.pid
exec /usr/local/bin/hello-world
end script
pre-start script
# Date format same as (new Date()).toISOString() for consistency
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] Hello World Starting" >> /var/log/hello-world.sys.log
end script
pre-stop script
rm /var/run/hello-world.pid
echo "[`date -u +%Y-%m-%dT%T.%3NZ`] Hello World Stopping" >> /var/log/hello-world.sys.log
end script
Это успешно запускает приложение при запуске. Если я выполню:
/sbin/start hello-world
Это снова запускает приложение: я хотел бы выполнить определенную команду только при запуске системы, а не при запуске приложения, например:
Первое исполнение:
Второе исполнение с использованием /sbin/start hello-world
:
Есть ли способ сделать это?
У меня есть одно решение, но оно уродливое.
Так.. /proc/uptime
содержит количество секунд с момента запуска.
$ cat /proc/uptime
350735.47 234388.90
Первое число - количество включенных секунд, второе число - количество секунд простоя.
ТАК..
$UPTIME=$(cut -f1 -d' '< /proc/uptime)
if [ $UPTIME -le 300 ] then
/start/pre-run/script.sh
fi
Запустил бы предварительный сценарий, если система только что загрузилась (или не работала в течение 300 секунд). Вы можете настроить 300 секунд на фактическое время, необходимое вашей системе для подготовки.
Это чертовски грязно, но попробовать стоит, правда?
Используйте файл cookie ниже /var/run
*. Выполнять конкретный сценарий запуска, только если cookie-файла не существует, и создавать его после успешного выполнения.
*) Стандарт иерархии файловой системы 2.3
Files under this directory must be cleared (removed or truncated as appropriate) at the beginning of the boot process.