서버를 시작할 때마다 스크립트를 실행하고 싶습니다. 문제는 스크립트를 실행하려면 특정 사용자가 필요하다는 것입니다. 루트로 루트로 시도하면 특정 패키지 (예 : 루비)를 찾을 수 없습니다.
xxx user01로 변경하려고합니다.
sudo su user01
/etc/init.d/script start
그러나 이것은 작동하지 않습니다.
답변
sudo su user01
스크립트에서 실행 한다고해서 다음 명령이 결과 쉘로 전송되는 것은 아닙니다. 실제로 이것은 새로운 쉘이 user01로 생성되어 종료되지 않음을 의미합니다!
두가지:
-c 'command...'
처럼 인수를 su 에 전달하여 다른 사용자로 명령을 실행할 수 있습니다su user01 -c '/etc/init.d/script start'
.- rc.local에서 /etc/init.d를 사용하는 서비스를 시작하는 것은 올바른 일이 아닙니다. 당신은 같은 배포 도구를 사용하여 시작시 서비스를 활성화 사용할
chkconfig
또는update-rc.d
. 또한 /etc/init.d에서로 시작해서는 안되는 작업을 원하지 않습니다root
. 작업 자체는 다른 사용자 계정으로 자유롭게 포크 할 수 있지만 루트가 호출해야합니다.
답변
무언가를 /etc/crontab
넣고 실행할 수 있습니다@reboot
@reboot username /etc/init.d/script start
답변
다음과 같이 sudo를 통해 명령을 실행할 수 있습니다.
sudo -H -u user01 /etc/init.d/script start
-H는 HOME 환경 변수를 사용자 환경 변수로 설정합니다.
-u는 실행할 사용자 이름을 지정합니다.
답변
sudoers에서 requiretty (사용자가 로그인해야 함) 때문에 sudo로 해당 스크립트를 실행할 수 없습니다. 다소 위험 할 수있는 비활성화를 원할 수 있습니다.
또한 runsuid라는 다소 오래된 도구가 있습니다. http://freecode.com/projects/runsuid
HTH