Cron
我的腳本在重新啟動時從哪裡開始
幾天前,我寫了一個腳本,把它放在某個地方,讓它在我的樹莓派啟動時自動啟動。
ps -ax
給我:2041 ? S 0:00 /usr/sbin/apache2 -k start 2064 ? Ss 0:00 /usr/sbin/cron 2067 ? S 0:00 /USR/SBIN/CRON 2068 ? S 0:00 /USR/SBIN/CRON 2072 ? Ss 0:00 /bin/sh -c eibd -t 1023 -S -D -R -T -i --no-tunnel-cl... 2073 ? Ss 0:00 /bin/sh -c python2.7 /opt/scripts/nibe_uplink/main.py 2074 ? S 0:00 eibd -t 1023 -S -D -R -T -i --no-tunnel-client-queuin... 2075 ? Rl 1:25 python2.7 /opt/scripts/nibe_uplink/main.py
pid 2074 從
/etc/crontab
. pid 2075 開始於crontab -e
如何找到 pid 2073 從哪裡開始?
是什麼開始了這個過程?
您可以使用
ps
來查找每個程序的父程序,方法是添加-l
(ps -axl
) 以提供“長”輸出,或者通過專門請求ppid
:ps -o ppid 2074 PPID 2072
重複 2072 年,看看是什麼開始的(可能是 CRON)。
為什麼是兩個程序?
cron 將每個命令傳遞給 shell。從crontab(5):
該行的整個命令部分,直到換行符或“%”字元,將由 /bin/sh 或由 cronfile 的 SHELL 變數中指定的 shell 執行。
如果您有以下行
crontab
:0 * * * * python2.7 /opt/some/script.py
…然後當條目需要執行時(每小時,每小時),cron
/bin/sh
使用兩個參數-c
和python2.7 /opt/some/script.py
.然後,shell 將“-c”之後的所有項目解釋為要執行的命令。
python2.7
它從中查找PATH
,並使用單個參數執行它/opt/some/script.py
。因此,根據您的 shell(包括/bin/sh
指向的內容),現在可能有兩個程序正在執行:
/bin/sh -c python2.7 /opt/some/script.py
/usr/bin/python2.7 /opt/some/script.py
這就是為什麼
ps
向您顯示 2 個eibd
程序和 2python2.7
個程序的原因,儘管您的crontab
.一些 shell 可能會避免像這樣分叉第二個程序。請參閱為什麼在簡單的 bash 命令中沒有明顯的複製或分叉以及它是如何完成的?