为什么 /etc/rc.local 启动相同的 Python 脚本两次?

Why /etc/rc.local starts same Python script twice?

我用这样的 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 文件中删除该起始行,则没有脚本 运行。用户也是他们两个的根用户。 真的是运行我的脚本同时两次吗?

Ok 发现 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

在这种情况下;该行:

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,它是调用 bash.

sudo 命令的 pid

因为rc.local脚本已经运行为root,所以不需要sudo,所以为了避免看到明显多份的情况,你可以省略sudo 在脚本中。