Cron

我的腳本在重新啟動時從哪裡開始

  • October 4, 2018

幾天前,我寫了一個腳本,把它放在某個地方,讓它在我的樹莓派啟動時自動啟動。

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使用兩個參數-cpython2.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 命令中沒有明顯的複製或分叉以及它是如何完成的?

引用自:https://unix.stackexchange.com/questions/473166