为什么 /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
在脚本中。
我用这样的 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
在脚本中。