나는 다음과 같은 신생 직업을 가지고 있습니다.
description "posty api"
start on mysql
stop on shutdown
env RACK_ENV=production
setuid vmail
setgid vmail
chdir /opt/posty_api
pre-start script
mkdir -p /var/run/posty
chown -R vmail:root /var/run/posty
end script
exec /usr/local/bin/unicorn -D -c /opt/posty_api/unicorn.rb --env production >> /var/log/posty/upstart.log 2>&1
post-stop exec kill `cat /var/run/posty/unicorn.pid`
respawn
respawn limit 1 10
폴더를 만들려면 /var/run
루트 권한이 필요합니다. 업 스타트 작업의 일부를 루트로, 서비스 자체를 권한이없는 사용자로 어떻게 실행할 수 있습니까?
답변
upstart
systemd
의 PermissionsStartOnly
설정 과 동등한 기능이 없습니다 . Cookbook이 말한 것처럼 작업의 모든 프로세스 는 setuid
스탠자 를 통해 사용자가 설정 한대로 실행됩니다 .
따라서 daemontools 방식으로 작업하십시오.
사용 setuidgid
, setuidgid
, s6-setuidgid
, chpst
, runuid
, 또는 setuidgid
에서 exec
연 :
exec \ 누군가를 세우다 \ 유니콘 -D -c /opt/posty_api/unicorn.rb --env 제작 >> /var/log/posty/upstart.log 2> & 1
그건 그렇고 끔찍한 로깅 메커니즘입니다. 데몬 툴즈 방법은 것 적절한 자동 순환, 회전 가능한 주문형, 크기 덮인 사용하여 로그인 multilog
, multilog
, s6-log
, svlogd
, tinylog
, 또는 cyclog
. upstart
그러나 메커니즘에 따라expect
이들과 통합하기가 까다 롭습니다 .
포크를 기대하다 exec \ 누군가를 세우다 \ 유니콘 -D -c /opt/posty_api/unicorn.rb --env production 2> & 1 | \ / usr / local / bin / chdir / var / log / \ setuidgid 로그 \ cyclog posty / unicorn /
( chdir
여기서 nosh
패키지 에서 체인로드하는 것이 있으며 엄격하게 필요하지는 않지만 다소 깔끔합니다.)
답변
스크립트 블록에서 setguid를 사용할 수 있으며 주어진 블록에만 영향을 미칩니다. 이 같은:
# Ubuntu upstart file at /etc/init/kafka.conf
description "kafka broker"
limit nofile 32768 32768
start on runlevel [2345]
stop on [!2345]
respawn
respawn limit 2 5
umask 007
kill timeout 300
pre-start script
# here you are root
ls -alh /root/
end script
chdir /usr/local/lib/kafka
script
setuid kafka
setgid kafka
# here you are user/group kafka
/usr/local/lib/kafka/bin/kafka-server-start.sh /usr/local/lib/kafka/config/server.properties
end script