Daemon
將參數傳遞給正在執行的腳本的最佳方法是什麼?
有一個腳本*(在破折號上)在系統啟動時執行(作為守護程序)*。該腳本在根目錄下執行。
在使用者下,我創建了一個具有正確參數的文件,腳本每秒檢查一次文件是否存在並讀取參數。
也就是說,我通過文件將參數傳遞給腳本(以root身份執行)。你能給我一個更好的方法嗎?
**需要什麼:**通過使用者命令(操作)以root權限執行腳本。在不提升使用者權限的情況下。從文件夾(if-pre-up.d/…)執行腳本時,也許有一個選項可以提升網路介面。我正在查看 udev 並插入快閃記憶體卡,但這並不方便。
@Marcus Müller 例如,有一個文件應該在短時間內對使用者可讀*(root:user 440)。之後權限應該變回(root:user 400)*
@Marcus Müller OS Gnu/Linux (Debian)。’這聽起來就像你本質上是在使用者和根守護程序之間傳遞消息。’ - 是的
@Frédéric Loyer 我喜歡管道的解決方案。@Marcus Müller 看到的錯誤管道行為確實發生了,但我需要每 5-30 分鐘傳遞一個參數,所以應該沒有混淆(b 之前的 a)。即我在 root 下執行的腳本將如下所示:
#!/usr/bin/dash mkfifo fifo while read line <fifo; do if [ $line -eq 'arg1' ] ; then echo 'Starting...' fi done
正確的?在安全方面,使用這種管道是否會惡化任何事情?
如果需要的只是特權提升,
sudo
可能比守護程序更好。如果你真的想要一個等待使用者輸入的後台程序,你可以使用
mkfifo
. 您的後台程序從這個命名管道中讀取一行 (read line < the_named_pipe
),而使用者只需在其中寫入一些內容 (echo arg >> the_named_pipe
)。然後後台程序將進行被動等待,而不是每秒使用 CPU 的主動等待。