Daemon

將參數傳遞給正在執行的腳本的最佳方法是什麼?

  • January 6, 2022

有一個腳本*(在破折號上)在系統啟動時執行(作為守護程序)*。該腳本在根目錄下執行。

在使用者下,我創建了一個具有正確參數的文件,腳本每秒檢查一次文件是否存在並讀取參數。

也就是說,我通過文件將參數傳遞給腳本(以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 的主動等待。

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