Рабочий - это способ запуска нескольких процессов ОС на основе одной и той же базы кода. Например, если у вас есть веб-приложение и в дополнение к веб-части оно имеет фоновый процесс, который, возможно, обрабатывает долго выполняющиеся задания или что-то в этом роде. И веб-процесс, и рабочий процесс будут рассчитаны на одновременное выполнение и запуск навсегда (т. Е. Никогда не завершаться, если он завершается, это приводит к сбою).
Задача, основанная на одной и той же ветви кода, не предназначена для параллельного выполнения с основным приложением. Он будет работать в течение определенного периода времени и выйти. Классический пример - для пакетной обработки и одиночных заданий, например, если у вас есть набор записей, которые необходимо обработать, когда они завершены, задача завершается (это ожидается и не является аварийным завершением). Задачи часто используются вместе с планировщиком и запускаются снова и снова.
Ни один из них не идеально подходит для того, что вы пытаетесь сделать. Вы можете использовать задачу, но вам нужно будет вручную управлять задачей и запустить ее до запуска приложения. Вы можете сделать это с помощью сценария оболочки и cf cli, например: нажмите ваше приложение с помощью --no-start
, запустите задачу, дождитесь ее завершения, затем cf start
ваше приложение.
Пара других вещей, которые вы могли бы сделать:
Пакет .profile
сценарий с вашим приложением . Это будет выполнено в том же контейнере, что и ваше приложение, но до его запуска. Приложение не запустится, если скрипт не завершится успешно. Это в значительной степени то, что вы сказали, что хотите, но у него есть серьезное ограничение, заключающееся в том, что у вас есть только небольшое количество времени для завершения сценария .profile
(по умолчанию 60 с, максимум 180 с на большинстве платформ, в основном это cf push -t
). Если оно не завершится достаточно быстро, ваше приложение будет считаться не запущенным, и оно будет перезапущено. Это также будет запускаться каждый раз, когда запускается ваше приложение, и в каждом экземпляре приложения, что может не соответствовать вашим ожиданиям. И последнее, что есть в документации, что вы не можете использовать это с Java-приложением, но они не правы, это просто сложнее).
Измените команду запуска (т. Е. cf push -c
). Это в основном то же самое, что и .profile
, за исключением того, что вы вводите несколько команд в команду запуска, например cf push -c 'do_something_1 && do_something_2 && do_something_3 ...'
). Эта опция имеет ограничения, аналогичные опции .profile
, плюс она плохо работает с Java buildpack, который имеет довольно длинную и сложную команду запуска (не используйте эту опцию для приложений Java).
Надеюсь, это поможет!