Как настроить upstart для запуска сценария при завершении работы, если процесс занимает более 10 секунд?

Я запускаю Ubuntu 11.10 на виртуальной машине (VirtualBox), чтобы больше узнать о разработке в Linux. Я использую git-репозиторий, чтобы сохранить свою работу, и написал сценарий, чтобы связать мою работу и сохранить ее в общей папке для использования, пока виртуальная машина не запущена.

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

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

description     "test script to run at shutdown"

start on runlevel [056]

task

script
touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long
end script

pre-start script
touch /media/sf_LinuxEducation/pre-start
sleep 15
touch /media/sf_LinuxEducation/pre-start-long
end script

post-start script
touch /media/sf_LinuxEducation/post-start
sleep 15
touch /media/sf_LinuxEducation/post-start-long
end script

pre-stop script
touch /media/sf_LinuxEducation/pre-stop
sleep 15
touch /media/sf_LinuxEducation/pre-stop-long
end script

post-stop script
touch /media/sf_LinuxEducation/post-stop
sleep 15
touch /media/sf_LinuxEducation/post-stop-long
end script

В результате выполняется только одно касание ( первое прикосновение в предстарт). Что мне нужно изменить, чтобы увидеть одно из прикосновений после сна на работу? Или есть более простой способ добиться этого?

Заранее спасибо.

11
задан 11 November 2011 в 21:33

2 ответа

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

Раздел процесса завершения поваренной книги говорит, что /etc/init/rc.conf будет запущен и вызовет /etc/init.d/rc. В свою очередь это в конечном итоге вызовет /etc/init.d/sendsigs. Так что, если вы start on starting rc, то ваша задача будет выполнена до выполнения команды rc (и сигнатур, которые обычно приводят к остановке процесса).

файл: /etc/init/test.conf

description "test script to run at shutdown"

start on starting rc
task
exec /etc/init/test.sh

файл: /etc/init/test.sh

touch /media/sf_LinuxEducation/start
sleep 15
touch /media/sf_LinuxEducation/start-long
0
ответ дан 11 November 2011 в 21:33

Я думаю, что это не может быть сделано через выскочку, как/etc/init.d/sendsigs сценарий, который вызывается выскочкой при остановке/перезапуске, уничтожает все процессы (killall5 -9) в течение 10 секунд, и даже если это не успешно выполняется, это идет для размонтирования всего и завершения работы.

Лучший способ состоял бы в том, чтобы использовать ржавые сценарии стиля/etc/init.d.

Пример:/etc/init.d/shutdown_job

#! /bin/sh
### BEGIN INIT INFO
# Provides:          shutdown_job
# Required-Start:    
# Required-Stop:     sendsigs
# Default-Start:
# Default-Stop:      0 6
# Short-Description: bla
# Description: 
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/lsb/init-functions

do_stop () {
    date > /root/s.log
    sleep 20
    date >> /root/s.log
}

case "$1" in
  start)
    # No-op
    ;;
  restart|reload|force-reload)
    echo "Error: argument '$1' not supported" >&2
    exit 3
    ;;
  stop)
    do_stop
    ;;
  *)
    echo "Usage: $0 start|stop" >&2
    exit 3
    ;;
esac

:

Затем активируйте сценарий

sudo update-rc.d shutdown_job start 19 0 6 .

Это поместит сценарий перед sendsigs сценарием на runlevels 0 6 (завершение работы, перезагрузка). Этот демонстрационный сценарий будет записывать дату, затем спать для 20 secs, затем записывать дату снова к /root/s.log.)

Подробнее:

7
ответ дан 11 November 2011 в 21:33

Другие вопросы по тегам:

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