Почему /etc/rc.local запускает один и тот же скрипт Python дважды? - PullRequest
0 голосов
/ 04 марта 2019

Я начинаю свой скрипт с rc.local следующим образом:

sudo python3 /home/pi/myscript.py &   # &-mark because of while loop

В терминале я пишу

ps aux | grep "/home/pi"

Он показывает мне:

python3 /home/pi/myscript.py         # <-- What is this?
sudo python3 /home/pi/myscript.py    # <-- rc.local 

ЕслиЯ удаляю эту стартовую строку из файла rc.local, тогда нет запущенных скриптов.Также пользователь является пользователем root для них обоих.Действительно ли мой скрипт запускается дважды одновременно?

Ответы [ 2 ]

0 голосов
/ 04 марта 2019

в этом случае;строка:

python3 /home/pi/myscript.py         # <-- What is this?

- это команда python, запускаемая командой sudo, а строка:

sudo python3 /home/pi/myscript.py    # <-- rc.local

- команда sudo, вызываемая rc.local.

Используя ps -fe, он также отображает родительский pid процессов, и из этого легко видеть, что команда python является дочерней по отношению к команде sudo (на примере sudo bash)):

$ ps -fe | grep bash
  UID   PID  PPID   C STIME   TTY           TIME CMD
    0 15095   481   0 10:18am ttys000    0:00.06 sudo bash
    0 15096 15095   0 10:18am ttys000    0:00.01 bash

, поэтому родителем bash является pid 15095, который является pid команды sudo, которая вызвала bash.

, поскольку скрипт rc.localуже запущен с правами root, sudo не требуется, поэтому, чтобы избежать ситуации, когда вы видите несколько копий, вы можете опустить sudo в скрипте.

0 голосов
/ 04 марта 2019

Ок, обнаружил, что rc.local не нуждается в sudo, потому что он уже запущен от имени пользователя root.Так что sudo вызывает это.

sudo python3 /home/pi/myscript.py &   # &-mark because of while loop 

Должно быть изменено на следующее:

python3 /home/pi/myscript.py &   # &-mark because of while loop
...