Как связать выполнение скриптов? [dубликат]

Пойдите для изменения размера и двойной загрузки. Всякий раз, когда вам удобнее Ubuntu позже, вы можете переустановить и пройти все это время. Вот как я пошел. Начал двойную загрузку 2 года назад на W7, но когда W10 пришел, и U14.04, я уничтожил диск. Теперь посмотрим, чтобы скоро перейти в U16.04.

0
задан 27 January 2018 в 21:56

4 ответа

Если вы запускаете свой скрипт из cron и хотите проверить предыдущий, он был прерван перед началом следующего. Вы можете создать свой скрипт в некотором предопределенном месте, символическую ссылку на его представление в / proc (/ proc / [ PID]), а затем удалите его в конце.

Затем вам нужно будет проверить, не сломалась ли ссылка, прежде чем запускать ее, или проверьте ее командную строку /proc/[PID]/cmdline, если она не сломана, для случай, связанный с сбоем, предотвратил бы удаление ссылки, и появился бы еще один процесс с тем же PID (если процесс все еще запущен, в командной строке будет ожидаемое содержимое. Если это что-то еще, значит, это просто другой процесс с тем же PID).

Если вы просто хотите связать список скриптов, но только если предыдущий скрипт не дал никакой ошибки, то вам, вероятно, не нужен cron.

вы можете просто использовать синтаксис && для объединения разных сценариев: оболочка проверит код возврата одного сценария и запустит следующий, только если e не было ошибки:

script1 && script2

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

while script; do true; done # here the true command, is just a "no operation"
0
ответ дан 17 July 2018 в 22:07

Поскольку вы используете cron, я предполагаю, что вы запускаете свой скрипт через регулярные промежутки времени. Каждый запуск изменяет файл результата.

Таким образом, скрипт может в следующий момент выполнить следующее:

проверить, существует ли файл результатов (т. Е. Это первый запуск), если он не , затем создайте его, чтобы вычислить время начала предыдущей проверки выполнения, если время модификации файла результата является более новым, чем это время начала, если это не значит, что последний прогон еще не завершен, поэтому скрипт выходит, ничего не делая

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

0
ответ дан 17 July 2018 в 22:07

Если вы запускаете свой скрипт из cron и хотите проверить предыдущий, он был прерван перед началом следующего. Вы можете создать свой скрипт в некотором предопределенном месте, символическую ссылку на его представление в / proc (/ proc / [ PID]), а затем удалите его в конце.

Затем вам нужно будет проверить, не сломалась ли ссылка, прежде чем запускать ее, или проверьте ее командную строку /proc/[PID]/cmdline, если она не сломана, для случай, связанный с сбоем, предотвратил бы удаление ссылки, и появился бы еще один процесс с тем же PID (если процесс все еще запущен, в командной строке будет ожидаемое содержимое. Если это что-то еще, значит, это просто другой процесс с тем же PID).

Если вы просто хотите связать список скриптов, но только если предыдущий скрипт не дал никакой ошибки, то вам, вероятно, не нужен cron.

вы можете просто использовать синтаксис && для объединения разных сценариев: оболочка проверит код возврата одного сценария и запустит следующий, только если e не было ошибки:

script1 && script2

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

while script; do true; done # here the true command, is just a "no operation"
0
ответ дан 23 July 2018 в 22:44
  • 1
    Это связано с тем, что если процесс аварийно завершает работу и новый многолетний процесс случайно принимает старый PID, задание cron больше не будет работать, и не будет понятно, почему он больше не работает. – Chai T. Rex 27 January 2018 в 14:02
  • 2
    Неправильно @Chai T. Rex: это точная причина, почему я сказал ему проверить, является ли командная строка ожидаемой, если ссылка не сломана – Camion 27 January 2018 в 14:30

Поскольку вы используете cron, я предполагаю, что вы запускаете свой скрипт через регулярные промежутки времени. Каждый запуск изменяет файл результата.

Таким образом, скрипт может в следующий момент выполнить следующее:

проверить, существует ли файл результатов (т. Е. Это первый запуск), если он не , затем создайте его, чтобы вычислить время начала предыдущей проверки выполнения, если время модификации файла результата является более новым, чем это время начала, если это не значит, что последний прогон еще не завершен, поэтому скрипт выходит, ничего не делая

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

0
ответ дан 23 July 2018 в 22:44
  • 1
    Это небезопасно, так как время модификации может указывать на внесение изменений, но не может указывать на то, что все изменения были сделаны и файл закрыт. – Chai T. Rex 27 January 2018 в 13:51
  • 2
    @ ChaiT.Rex Ну, я создам скрипт, чтобы внести изменения в файл в конце. Я имею в виду, что после этого сценарий закончен, так что это должно быть безопасно. – Emil Filipov 27 January 2018 в 17:19

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

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