sudo nohup 및 리디렉션

sudo nohup 및 리디렉션

sudoers 파일에 대한 올바른 Cmnd_Alias를 찾아보세요.

비밀번호 없이 실행할 수 있는 명령은 다음과 같습니다.

sudo /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

sudoers 파일에 추가한 줄은 다음과 같습니다.

## Cmnd alias specification
Cmnd_Alias AXTOOLTTYSTART = /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1
Cmnd_Alias AXTOOLTTYSTOP = /etc/init.d/axtty stop
Cmnd_Alias AXTOOLTTYSTATUS = /etc/init.d/axtty status
Cmnd_Alias AXTOOLINTCTLSTART = /sbin/initctl start ttyp?
Cmnd_Alias AXTOOLINTCTLSTOP = /sbin/initctl stop ttyp?

## This will disable password request for the axtools commands
%sudoaxtools ALL=(root) NOPASSWD: AXTOOLTTYSTART, AXTOOLTTYSTOP, AXTOOLTTYSTATUS, AXTOOLINTCTLSTART, AXTOOLINTCTLSTOP
Defaults!AXTOOLTTYSTART !requiretty
Defaults!AXTOOLTTYSTOP !requiretty

언급된 명령은 sudoaxtools 그룹의 구성원 또는 루트의 crontab에 의해 실행되는 스크립트(axopen) 내에서 실행됩니다.

/usr/local/bin/axopen

#!/bin/sh

SUDO=''
if (( $EUID != 0 )); then
    SUDO='sudo'
fi

echo -n "Checking for open connections"
while netstat -d | grep -q axel
do
  ((c++)) && ((c==900)) && break
  echo -n "."
  sleep 4
done
echo "done"

echo "Starting axtty service.."
$SUDO /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1
sleep 4
$SUDO /etc/init.d/axtty status

sudoaxtools 멤버를 통해 axopen을 실행하면 여전히 비밀번호를 묻는 메시지가 표시됩니다. 나는 이것이 단편화 때문일 것으로 예상했습니다 >/dev/null 2>&1.

중학교

nohup을 사용하는 이유는 단순히 nohup을 사용하면 어떤 이유로 서비스가 시작되지 않기 때문입니다.

sudo /etc/init.d/axtty start

따라서 누구든지 이 문제를 해결할 아이디어가 있다면 좋을 것입니다.

답변1

sudo 규칙의 일부로 리디렉션하고 싶지 않습니다. /etc/sudoers에는 실행된 프로그램이 포함되어 있으며 리디렉션은 sudo 명령과 별도로 발생합니다(포함된 쉘 수준에서).

(쉘) sudo /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

이는 sudo를 호출하고 sudo가 보는 출력을 리디렉션합니다.

(sudo) /usr/bin/nohup /etc/init.d/axtty 시작

이 sudoers 줄을 변경하십시오.

Cmnd_Alias AXTOOLTTYSTART = /usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

도착하다:

Cmnd_Alias AXTOOLTTYSTART = /usr/bin/nohup /etc/init.d/axtty start

답변2

결국 nohup 스크립트를 별도의 bash 스크립트에 넣었습니다.

/usr/local/bin/axttystart

#!/bin/sh

## Intermediate bashscript in order to sudo nohup properly
/usr/bin/nohup /etc/init.d/axtty start >/dev/null 2>&1

Cmnd_alias그런 다음 for를 포함하는 sudo'ers 행을 다음으로 변경하십시오 AXTOOLTTYSTART.

Cmnd_Alias AXTOOLTTYSTART = /usr/local/bin/axttystart

업데이트된 axopen 스크립트는 nohup 라인인 sudo axttystart스크립트 의 직접 sudo 실행을 대체합니다.

#!/bin/sh

[...]

echo "Starting axtty service.."
$SUDO /usr/local/bin/axttystart
sleep 4
$SUDO /etc/init.d/axtty status

관련 정보