실행 중인 스크립트에 인수를 전달하는 가장 좋은 방법은 무엇입니까?

실행 중인 스크립트에 인수를 전달하는 가장 좋은 방법은 무엇입니까?

스크립트가 있습니다(대시에서)시스템 시작 시 실행(데몬으로). 이 스크립트는 루트에서 실행됩니다.

올바른 매개변수를 사용하여 사용자 아래에서 파일을 생성하고 스크립트는 파일이 존재하는지 매초 확인하고 매개변수를 읽습니다.

즉, 파일을 통해 스크립트(루트로 실행)에 매개변수를 전달합니다. 더 좋은 방법을 알려 주실 수 있나요?

뭐가 필요하세요:사용자 명령(액션)을 통해 루트 권한으로 스크립트를 실행합니다. 사용자의 권한을 높일 필요가 없습니다. 폴더(if-pre-up.d/...)에서 스크립트를 실행할 때 네트워크 인터페이스를 높이는 옵션이 있을 수 있습니다. udev를 보고 플래쉬 카드를 꽂고 있는데 그게 별로 편리하지 않네요.

@Marcus Müller 예를 들어 사용자가 단시간에 읽어야 하는 파일이 있습니다.(루트:user440). 권리는 나중에 다시 변경되어야 합니다.(루트:user400)

@Marcus Müller 운영 체제 Gnu/Linux(Debian). '이 모든 것은 실제로 사용자와 루트 데몬 사이에 메시지를 전달하는 것처럼 들립니다.' - 예

@Frédéric Loyer 저는 파이프 솔루션을 좋아합니다. @Marcus Müller가 본 잘못된 파이프 동작이 발생하지만 5~30분마다 매개변수를 전달해야 하므로 혼동이 있어서는 안 됩니다(a 이전의 b). 즉, 루트에서 실행되는 스크립트는 다음과 같습니다.

#!/usr/bin/dash
mkfifo fifo
while read line <fifo; do
        if [ $line -eq 'arg1' ] ; then
                echo 'Starting...'
        fi
done

옳은? 안전 측면에서 이 파이프를 사용하면 문제가 더 악화됩니까?

답변1

권한 상승만 필요한 경우 sudo데몬보다 나을 수 있습니다.

사용자 입력을 기다리는 백그라운드 프로세스를 정말로 원한다면 를 사용할 수 있습니다 mkfifo. 백그라운드 프로세스는 명명된 파이프( )에서 라인을 읽고 read line < the_named_pipe사용자는 그 파이프( echo arg >> the_named_pipe)에 무언가를 씁니다. 그러면 백그라운드 프로세스는 매초 CPU를 사용하여 적극적으로 기다리는 대신 수동적으로 대기합니다.

관련 정보