os.getpid возвращает PID, который не существует?

У меня есть скрипт Python, который запускается из rc.local, когда загружается мой Raspberry Pi. Сценарий сохранит PID с помощью os.getpid () в виде простого текстового файла.

pid = str(os.getpid())
pidfile = open("garage.pid", "w")
pidfile.write(pid)
pidfile.close()

У меня есть немного кода PHP в моем index.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";
}
?>

Когда я запускаю вышеупомянутый скрипт Python вручную из оболочки, он работает фантастически. Однако при запуске из /etc/rc.local при загрузке он сохраняет номер PID, но, глядя на запущенные процессы, он не обнаруживается и происходит сбой сценария PHP.

Пример строки, добавленной в rc.local:

(sleep 10;python /path/to/script.py)&

Я пробовал это с использованием -u root в команде ps, но все равно не повезло. Есть мысли здесь?

РЕДАКТИРОВАТЬ: Например, когда я позволяю сценарию запускаться из 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

0

Решение

Я решил свою проблему, используя метод crontab (@reboot) для запуска сценария python при перезагрузке. Это, очевидно, позволяет избежать проблем с использованием rc.local и попыткой использовать os.getpid в python. Во всяком случае, все работает сейчас, и я счастлив! Спасибо всем за помощь.

Запустите ‘crontab -e’ и добавьте следующее:

@reboot cd /pathto/scripts && sudo python script.py &

Удален / закомментирован код из rc.local.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]