os.getpid returns PID 不存在?
os.getpid returns PID that doesn't exist?
当我的 Raspberry Pi 启动时,我有一个 Python 来自 rc.local 的 运行 脚本。该脚本将使用 os.getpid() 在纯文本文件中存储 PID。
pid = str(os.getpid())
pidfile = open("garage.pid", "w")
pidfile.write(pid)
pidfile.close()
我的 index.php 中有一些 PHP 代码通过读取文本文件并检查进程来报告脚本的状态。
<?php
$fileContent = file_get_contents("garage.pid");
$PsStatus = exec("ps -a -p $fileContent >/dev/null && echo \"True\" || echo \"False\"");
if($PsStatus == "True"){
echo "Running";
}
if($PsStatus == "False"){
echo "Stopped";
}
?>
当我从 shell 手动 运行 上面的 Python 脚本时,它运行得非常好。然而,当 运行 从 /etc/rc.local 启动时,它确实保存了一个 PID 号,但是查看 运行ning 进程,它没有出现并且 PHP脚本失败。
添加到 rc.local 的行示例:
(sleep 10;python /path/to/script.py)&
我已经尝试在 ps 命令上使用 -u root,但仍然没有成功。有什么想法吗?
编辑:例如,当我让 rc.local 中的脚本 运行 重新启动时,文件写入值为“4126”。
运行 'ps -u root' 显示:
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:44 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
6 ? 00:00:00 kworker/u8:0
7 ? 00:00:34 rcu_preempt
8 ? 00:00:00 rcu_sched
9 ? 00:00:00 rcu_bh
10 ? 00:00:00 migration/0
11 ? 00:00:00 migration/1
12 ? 00:00:31 ksoftirqd/1
14 ? 00:00:00 kworker/1:0H
15 ? 00:00:00 migration/2
16 ? 00:00:13 ksoftirqd/2
18 ? 00:00:00 kworker/2:0H
19 ? 00:00:00 migration/3
20 ? 00:00:11 ksoftirqd/3
22 ? 00:00:00 kworker/3:0H
23 ? 00:00:00 khelper
24 ? 00:00:00 kdevtmpfs
25 ? 00:00:00 netns
26 ? 00:00:00 perf
27 ? 00:00:00 khungtaskd
28 ? 00:00:00 writeback
29 ? 00:00:00 crypto
30 ? 00:00:00 bioset
31 ? 00:00:00 kblockd
33 ? 00:00:00 rpciod
34 ? 00:00:00 kswapd0
35 ? 00:00:00 fsnotify_mark
36 ? 00:00:00 nfsiod
42 ? 00:00:00 kthrotld
44 ? 00:00:00 VCHIQ-0
45 ? 00:00:00 VCHIQr-0
46 ? 00:00:00 VCHIQs-0
47 ? 00:00:00 iscsi_eh
48 ? 00:00:00 dwc_otg
49 ? 00:00:00 DWC Notificatio
51 ? 00:00:00 VCHIQka-0
52 ? 00:00:00 SMIO
53 ? 00:00:00 deferwq
54 ? 00:00:01 kworker/u8:2
55 ? 00:00:01 mmcqd/0
56 ? 00:00:00 jbd2/mmcblk0p6-
57 ? 00:00:00 ext4-rsv-conver
58 ? 00:00:03 kworker/2:1
74 ? 00:00:01 kworker/3:1
141 ? 00:00:00 scsi_eh_0
142 ? 00:00:00 scsi_tmf_0
143 ? 00:00:00 usb-storage
178 ? 00:00:00 udevd
302 ? 00:00:00 udevd
308 ? 00:00:00 udevd
417 ? 00:00:00 kworker/0:1H
1093 ? 00:00:00 kworker/2:1H
1591 ? 00:00:01 ifplugd
1593 ? 00:00:04 ifplugd
1616 ? 00:00:04 ifplugd
1619 ? 00:00:07 RTW_CMD_THREAD
1625 ? 00:00:00 wpa_supplicant
2025 ? 00:00:00 rsyslogd
2132 ? 00:00:01 apache2
2226 ? 00:00:00 cron
2266 ? 00:00:00 ntpd
2368 ? 04:14:37 python
2370 ? 00:00:00 startpar
2399 tty1 00:00:00 getty
2400 tty2 00:00:00 getty
2401 tty3 00:00:00 getty
2402 tty4 00:00:00 getty
2403 tty5 00:00:00 getty
2404 tty6 00:00:00 getty
2405 ? 00:00:00 getty
2513 ? 00:00:00 kworker/1:1H
2740 ? 00:00:00 dhclient
2806 ? 00:00:00 sshd
9871 ? 00:00:00 kworker/0:2
9957 ? 00:00:00 sshd
26236 ? 00:00:01 kworker/3:0
26287 ? 00:00:02 kworker/0:0
26555 ? 00:00:00 kworker/2:2
31051 ? 00:00:00 kworker/1:1
31127 ? 00:00:01 kworker/1:2
我通过使用 crontab (@reboot) 方法在重启时 运行 python 脚本解决了我的问题。这显然避免了使用 rc.local 并尝试在 python 中使用 os.getpid 的问题。无论如何,现在一切正常,我很高兴!感谢大家的帮助。
运行 'crontab -e' 并添加了以下内容:
@reboot cd /pathto/scripts && sudo python script.py &
Removed/commented 从 rc.local 中提取代码。
当我的 Raspberry Pi 启动时,我有一个 Python 来自 rc.local 的 运行 脚本。该脚本将使用 os.getpid() 在纯文本文件中存储 PID。
pid = str(os.getpid())
pidfile = open("garage.pid", "w")
pidfile.write(pid)
pidfile.close()
我的 index.php 中有一些 PHP 代码通过读取文本文件并检查进程来报告脚本的状态。
<?php
$fileContent = file_get_contents("garage.pid");
$PsStatus = exec("ps -a -p $fileContent >/dev/null && echo \"True\" || echo \"False\"");
if($PsStatus == "True"){
echo "Running";
}
if($PsStatus == "False"){
echo "Stopped";
}
?>
当我从 shell 手动 运行 上面的 Python 脚本时,它运行得非常好。然而,当 运行 从 /etc/rc.local 启动时,它确实保存了一个 PID 号,但是查看 运行ning 进程,它没有出现并且 PHP脚本失败。
添加到 rc.local 的行示例:
(sleep 10;python /path/to/script.py)&
我已经尝试在 ps 命令上使用 -u root,但仍然没有成功。有什么想法吗?
编辑:例如,当我让 rc.local 中的脚本 运行 重新启动时,文件写入值为“4126”。
运行 'ps -u root' 显示:
PID TTY TIME CMD
1 ? 00:00:02 init
2 ? 00:00:00 kthreadd
3 ? 00:00:44 ksoftirqd/0
5 ? 00:00:00 kworker/0:0H
6 ? 00:00:00 kworker/u8:0
7 ? 00:00:34 rcu_preempt
8 ? 00:00:00 rcu_sched
9 ? 00:00:00 rcu_bh
10 ? 00:00:00 migration/0
11 ? 00:00:00 migration/1
12 ? 00:00:31 ksoftirqd/1
14 ? 00:00:00 kworker/1:0H
15 ? 00:00:00 migration/2
16 ? 00:00:13 ksoftirqd/2
18 ? 00:00:00 kworker/2:0H
19 ? 00:00:00 migration/3
20 ? 00:00:11 ksoftirqd/3
22 ? 00:00:00 kworker/3:0H
23 ? 00:00:00 khelper
24 ? 00:00:00 kdevtmpfs
25 ? 00:00:00 netns
26 ? 00:00:00 perf
27 ? 00:00:00 khungtaskd
28 ? 00:00:00 writeback
29 ? 00:00:00 crypto
30 ? 00:00:00 bioset
31 ? 00:00:00 kblockd
33 ? 00:00:00 rpciod
34 ? 00:00:00 kswapd0
35 ? 00:00:00 fsnotify_mark
36 ? 00:00:00 nfsiod
42 ? 00:00:00 kthrotld
44 ? 00:00:00 VCHIQ-0
45 ? 00:00:00 VCHIQr-0
46 ? 00:00:00 VCHIQs-0
47 ? 00:00:00 iscsi_eh
48 ? 00:00:00 dwc_otg
49 ? 00:00:00 DWC Notificatio
51 ? 00:00:00 VCHIQka-0
52 ? 00:00:00 SMIO
53 ? 00:00:00 deferwq
54 ? 00:00:01 kworker/u8:2
55 ? 00:00:01 mmcqd/0
56 ? 00:00:00 jbd2/mmcblk0p6-
57 ? 00:00:00 ext4-rsv-conver
58 ? 00:00:03 kworker/2:1
74 ? 00:00:01 kworker/3:1
141 ? 00:00:00 scsi_eh_0
142 ? 00:00:00 scsi_tmf_0
143 ? 00:00:00 usb-storage
178 ? 00:00:00 udevd
302 ? 00:00:00 udevd
308 ? 00:00:00 udevd
417 ? 00:00:00 kworker/0:1H
1093 ? 00:00:00 kworker/2:1H
1591 ? 00:00:01 ifplugd
1593 ? 00:00:04 ifplugd
1616 ? 00:00:04 ifplugd
1619 ? 00:00:07 RTW_CMD_THREAD
1625 ? 00:00:00 wpa_supplicant
2025 ? 00:00:00 rsyslogd
2132 ? 00:00:01 apache2
2226 ? 00:00:00 cron
2266 ? 00:00:00 ntpd
2368 ? 04:14:37 python
2370 ? 00:00:00 startpar
2399 tty1 00:00:00 getty
2400 tty2 00:00:00 getty
2401 tty3 00:00:00 getty
2402 tty4 00:00:00 getty
2403 tty5 00:00:00 getty
2404 tty6 00:00:00 getty
2405 ? 00:00:00 getty
2513 ? 00:00:00 kworker/1:1H
2740 ? 00:00:00 dhclient
2806 ? 00:00:00 sshd
9871 ? 00:00:00 kworker/0:2
9957 ? 00:00:00 sshd
26236 ? 00:00:01 kworker/3:0
26287 ? 00:00:02 kworker/0:0
26555 ? 00:00:00 kworker/2:2
31051 ? 00:00:00 kworker/1:1
31127 ? 00:00:01 kworker/1:2
我通过使用 crontab (@reboot) 方法在重启时 运行 python 脚本解决了我的问题。这显然避免了使用 rc.local 并尝试在 python 中使用 os.getpid 的问题。无论如何,现在一切正常,我很高兴!感谢大家的帮助。
运行 'crontab -e' 并添加了以下内容:
@reboot cd /pathto/scripts && sudo python script.py &
Removed/commented 从 rc.local 中提取代码。