Как запустить службу, запустить задание, а затем закрыть службу в терминале Linux?
Быть Linux
и Bash noob, извините, если вопрос слишком простой или отсутствует какая-либо важная информация.
В основном я использую python-celery library
(с Redis Broker) для обработки некоторых массивных json
Файлы чанка за чанк параллельно.
Прямо сейчас, способ, которым я достигаю это (дайте мне знать, если есть лучший способ)
Терминал 1
$celery worker -A celery_worker -l info -c 64 #To start the celery worker service which listens for input
Терминал 2
$./pythonScript.py arg1 arg2 #Script to call the service
После выполнения задачи в Терминале 2 я посылаю прерывание клавиатуры в терминал 1 с помощью Ctrl+C, и рабочий выключается.
Но как мне добиться всего этого, просто запустив один скрипт bash в терминале, то есть запустить celery_worker
служба, запустить скрипт Python, а затем выключить рабочий?
Как грязный обходной путь, я могу заставить работника работать 24*7
не выключая работника, и просто используйте скрипт Python всякий раз, когда мне нужен сервис. Но я считаю, что это приведет к потере памяти, и у работников сельдерея есть раздражающая тенденция к самостоятельному закрытию через некоторое время.
Мне также нужно добавить всю процедуру в ежедневную работу cron.
1 ответ
Если я вас правильно понял, Терминал 2 зависит от Терминала 1. Хорошо, так что вы можете написать Bash-скрипт, который сначала проверяет, работает ли работник сельдерея. Если рабочий не запущен, запустите рабочий как фоновый процесс и перейдите к следующему шагу. Если рабочий запущен, перейдите непосредственно к следующему шагу.
Следующий шаг сверху состоит из запуска скрипта Python.
После этого найдите рабочий процесс, получите его PID (идентификатор процесса) и уничтожьте его. Это не самый чистый способ, но он соответствует тому, что вы делаете сейчас с помощью Ctrl + C.
Для настройки cronjobs проверьте эту страницу.