
특정 사용자 계정으로 시작하는 동안 응용 프로그램을 시작하는 방법이 있습니까?
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.log
60초 후에 즐겨 사용하는 편집기를 열어 거기에 유용한 정보가 있는지 확인하세요.
@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>"