Это учебник для начинающих там.

Мы рассмотрим несколько способов автоматизации скрипта Python в фоновом режиме в Linux.

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

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

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

Хватит разговоров, давайте посмотрим код!

Наш базовый скрипт на Python, который принимает аргумент командной строки:

#!/usr/local/bin/python3
# Name: script.py
argument = sys.argv[1]
print("Hello automated script. Passed in argument: " + argument)

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

Для этого я делаю еще один скрипт Python для «драйвера», например:

#!/usr/local/bin/python3
# Name: driver.py
my_args = ['first', 'second', 'third']
for arg in my_args:
  os.system('python3 script.py ' + arg)

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

chmod +x driver.py

Теперь мы можем запустить скрипт с командой nohup, которая игнорирует сигнал отбоя. По сути, это означает, что мы можем закрыть терминал без прекращения выполнения из-за этого. И затем мы добавляем важный & в конце, который запускает скрипт в фоновом режиме:

nohup python3 driver.py &

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

nohup python3 driver.py > /path/to/file.log &

После этого, чтобы найти процесс, работающий в фоновом режиме, мы можем увидеть его с помощью команды ps aux. Более конкретно, мы можем найти его:

ps aux | grep driver.py

Примечание. Выходные данные процесса будут доступны после завершения выполнения. Это связано с тем, что вывод буферизуется во время выполнения. Если мы хотим избежать этой буферизации и видеть вывод во время выполнения, мы можем добавить флаг -u:

nohup python3 -u driver.py > /path/to/file.log &

Спасибо за чтение, и я надеюсь, что это было просто и достаточно подробно для вас!