Не съм сигурен дали това всъщност е проблемът, нонека да обясня: Имам питънски скрипт, който започва с баш скрипт. Задачата на баширащия скрипт се изпълнява след това, но когато подкарам ps aux, обаждането все още е налице.
#!/bin/bash
export http_proxy="1.2.3.4:1234"
python -u /home/user/folder/myscript.py -some Parameters >> /folder/Logfile_stout.log 2>&1
Ако се захваля ps aux | grep python
Получавам python -u /home/user/folder/myscript.py -some Parameters
като резултат. Според лог файла питънският скрипт е затворен правилно. (Кодът за завършване на скрипта е в самия скрипт.) Сценарият започва всеки час и все още виждам всички обаждания от предишните часове.
Благодаря предварително за вашата помощ, съвети или съвети!
Отговори:
2 за отговор № 1Скриптовият скрипт баш ще остане толкова дълго, колкото се изпълнява детето (питън скрипт). Ако стартирате скрипта на Python, който работи във фонов режим (добавете & в края на линията на Python), родителят ще излезе.
#!/bin/bash
export http_proxy="1.2.3.4:1234"
python -u /home/user/folder/myscript.py -some Parameters >> /folder/Logfile_stout.log 2>&1 &
Ако разгледате списъка с процеси (например "ps -elf"). Тя ще покаже на детето (ако все още работи). Детето PPID (родителски PID) ще бъде 1 (root PID) вместо родителското PID, защото родителят вече не съществува.
В крайна сметка това може да е проблем, ако скриптът на Python никога не излиза. Можете да накарате родителския скрипт да изчака и да убие детето, напр. изчакайте 30 секунди и убийте дете, ако все още е налице:
#!/bin/bash
export http_proxy="1.2.3.4:1234"
python -u /home/user/folder/myscript.py -some Parameters >> /folder/Logfile_stout.log 2>&1 &
sleep 30
jobs
kill %1
kill -9 %1
jobs