Как создать однозадачное задание Upstart, которое должно завершиться до начала двух других заданий?

Добавить автоматически обнаруженную кодировку в файле: ~ / .gconf / apps / gedit-2 / preferences / encodings /% gconf.xml

<?xml version="1.0"?>
<gconf>
    <entry name="auto_detected" mtime="1444988803" type="list" ltype="string">
        <li type="string">
            <stringvalue>UTF-8</stringvalue>
            <stringvalue>WINDOWS-1251</stringvalue>
            <stringvalue>UTF-16</stringvalue>
        </li>
    </entry>
    <entry name="shown_in_menu" mtime="1444988803" type="list" ltype="string">
        <li type="string">
            <stringvalue>WINDOWS-1251</stringvalue>
        </li>
    </entry>
</gconf>

Здесь строка «& lt; stringvalue & gt; *** & Lt; / stringvalue & GT;» - желаемые cahrsets

1
задан 10 October 2014 в 13:34

2 ответа

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

Например:

# mainJob - 
#
# This service emit myEvent to run firstJob 
description "emit myEvent to run firstJob"
start on runlevel [2345]
task
console log
script
     echo "(startTask) $UPSTART_JOB -- $UPSTART_EVENTS" 
     exec /path/to/your/script
     initctl emit -n myEvent
end script

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

Следуя моим примерам, я создал простой firstJob.conf, подобный этому:

# firstJob - 
#
# This service print environment variable 
description "print environment variable"
start on runlevel [2345]
stop on runlevel [016]
task
console log
script
if [ "$RUNLEVEL" = "0" -o "$RUNLEVEL" = "1" -o "$RUNLEVEL" = "6" ]; then
     exec  echo "(stopTask) $UPSTART_JOB -- $UPSTART_EVENTS"  
else
     exec  echo "(startTask) $UPSTART_JOB -- $UPSTART_EVENTS" 
fi
end script

И затем я переопределяю начало при условии создания файла переопределения:

echo "start on myEvent" > /etc/init/firstJob.override

Итак firstJob начнется на myEvent, сгенерированном mainJob и остановится на runlevel [016]

. Я тестировал эти задания на lubuntu 12.04 и после перезагрузки, которые я нашел в /var/log/upstart/firstJob.log:

  (startTask) firstJob -- myEvent

Вы должны проверить, нужно ли запускать «другие два задания» для определенного условия события, и убедитесь, что mainJob запускается в этих событиях.

2
ответ дан 24 May 2018 в 03:04
  • 1
    Необходимость дублировать начальные условия зависимых заданий в условиях начала mainJob означает, что вещи могут прорваться неочевидным образом, если я не узнаю об изменениях владельцами этих других заданий. Для меня не очевидно, будет ли даже возможным слияние их условий. Количество файлов конфигурации заданий также масштабируется с количеством зависимых заданий. – froage 10 October 2014 в 13:23
  • 2
    Да, endeed, ваше наблюдение правильное, и это слабая точка этого решения – Lety 10 October 2014 в 15:52
start on starting jobA or starting jobB

instance $JOB

pre-start exec /path/to/script

Начальный бит запрещает выполнение заданий в жизненном цикле до тех пор, пока это задание не завершится.

Бит экземпляра так, что оба стартовых события (для jobA и jobB) заблокированы, а не только один, как это было бы, если бы у вас не было строфы экземпляра.

Использование предварительного запуска exec / script (вместо обычного exec / script) заключается в том, что когда сценарий / выполненная команда завершена, задание все равно будет считаться запущенным, тогда как при традиционном exec / script задание считается остановленным при выходе из сценария exec / script.

Использование задачи будет именно тем, что заставляет работу работать дважды (например, если заданные вами задания перезапущены), поэтому мы оставляем это.

1
ответ дан 24 May 2018 в 03:04
  • 1
    Это решение не совсем работает. Фактически это гарантирует, что / path / to / script будет выполняться дважды, один раз для каждого экземпляра, но он, кажется, предотвращает более двух. Исправить это не очевидно. – froage 8 October 2014 в 12:21
  • 2
    Вы можете добавить некоторые вещи в начало, которые создают файл в / run, который говорит, что эта вещь уже выполнена, а затем останавливается, если там уже есть файл. – CameronNemo 11 October 2014 в 04:46

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

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