当我的Raspberry Pi启动时,我有一个从rc.local运行的Python脚本。该脚本将使用纯文本文件中的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号,但是查看正在运行的进程,它不会显示,并且PHP脚本会失败。
添加到rc.local的行示例:
(sleep 10;python /path/to/script.py)&
我已经尝试过在ps命令中使用-u root但仍然没有运气。有什么想法吗?
编辑:例如,当我让脚本在重新启动时从rc.local运行时,该文件的值为&#39; 4126&#39;。
跑步&#39; ps -u root&#39;显示:
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
答案 0 :(得分:0)
我通过使用crontab(@reboot)方法在重启时运行python脚本解决了我的问题。这显然避免了使用rc.local并尝试在python中使用os.getpid的问题。无论如何,现在都在工作,我很高兴!谢谢大家的帮助。
运行'crontab -e'并添加以下内容:
@reboot cd /pathto/scripts && sudo python script.py &
从rc.local中删除/注释掉了代码。