시작 시 특정 사용자로 애플리케이션을 실행하는 방법은 무엇입니까?

시작 시 특정 사용자로 애플리케이션을 실행하는 방법은 무엇입니까?

특정 사용자 계정으로 시작하는 동안 응용 프로그램을 시작하는 방법이 있습니까?

a_small_app예를 들어, 사용자 계정 bob(그룹에 있음 )으로 실행 하고 싶습니다 bobsgroup. 에 뭔가를 추가하나요 /etc/init.d?

참고: 애플리케이션이 시작되는 것을 원하지 않습니다.사용자가 로그인한 후오히려 컴퓨터가 시작될 때.

답변1

시작 시스템에 구애받지 않는 방법. 이를 /etc/rc.local스크립트 /etc/init.d/..., Upstart 구성 파일 및 시스템 구성에서도 사용할 수 있습니다 .

sudo -u oli /full/path/to/application

이 명령은 루트 사용자로 실행되며 sudo"oli" 사용자로 드롭다운됩니다. 분명히 귀하의 목적에 맞게 사용자와 명령을 변경하십시오.

이 작업을 수행하는 방법은 적어도 12가지가 있다고 덧붙이고 싶습니다... 하지만 제 경험상 그 방법들은 모두 거의 동일합니다. 다음은 스탠자를 사용한 신생 예입니다 setuid.

start on (filesystem and stopped udevtrigger)
stop on runlevel [06]

setuid oli
respawn

exec /full/path/to/application

답변2

이전 버전의 Ubuntu에 대해서는 잘 모르겠지만 최근 버전에서는 다음을 사용할 수도 있습니다 @reboot(예:여기 우분투 위키에서, 조금 아래로 스크롤하거나 Ctrl+F를 눌러@재부팅).

이는 사용자가 루트가 될 필요 없이(또는 루트 계정에 액세스할 수 있는 사람이 대신 이를 수행하게 하거나) 로그인하지 않고도 부팅 시 자신의 명령을 실행할 수 있기를 원하는 경우에 유용한 선택일 수 있습니다. . 작동하면 로그인하지 않고도 작동됩니다.

따라서 "bob"으로 를 입력한 crontab -e후 열리는 파일 맨 아래에 다음과 같이 새 줄을 추가합니다.

# bottom of bob's crontab
@reboot /path/to/a_small_app

작동하지 않는 경우 환경 변수, 특히 PATH. 나는 보통 crontab 위에 명시적 HOME으로 설정합니다. PATH다음과 같은 것 :

# top of bob's crontab
HOME=/home/bob
PATH=/home/bob/.local/bin:/usr/local/bin:/usr/bin:/bin

작동하지 않는 이유를 알아내는 기술:

# bottom of bob's crontab
* * * * * /path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log # will run every minute

... 그런 다음 /tmp/a_small_app.log60초 후에 즐겨 사용하는 편집기를 열어 거기에 유용한 정보가 있는지 확인하세요.

@reboot오늘 시작하려고 할 때티먹스실행될 명령이 실행되어야 하는 세션에서 나는 오늘 완고한 스크립트를 우연히 발견했고 결국 이 작은 트릭으로 작동하게 되었습니다. 위의 로깅과 함께 표시하면 다음과 같습니다.

@reboot tmux new-session -d -s mysession "bash -c '/path/to/a_small_app 2>&1 | tee /tmp/a_small_app.log'"

답변3

첫 번째 답변은 더 이상 Ubuntu 14.10에서 작동하지 않는 것 같습니다.

이것이 제가 하는 방법입니다(/etc/rc.local에 넣으세요).

su <username> - -c "<command>"

관련 정보