Назад | Перейти на главную страницу

upstart - выполнять определенную команду только при запуске системы, а не при запуске приложения.

Я новичок в выскочке и хотел бы знать, есть ли способ указать выскочке выполнять определенную команду только при запуске системы, а не при последующем перезапуске приложения из командной строки. Например, у меня следующая конфигурация выскочки:

#!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

Это снова запускает приложение: я хотел бы выполнить определенную команду только при запуске системы, а не при запуске приложения, например:

Первое исполнение:

  1. Система запускается
  2. Выскочка выполняется
  3. Выполняется определенный сценарий запуска системы
  4. Приложение hello-world выполнено

Второе исполнение с использованием /sbin/start hello-world:

  1. Выполнять приложение только без выполнения определенного сценария запуска

Есть ли способ сделать это?

У меня есть одно решение, но оно уродливое.

Так.. /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.