명령에서 환경 변수 시작

명령에서 환경 변수 시작

내 클라이언트에 대한 역방향 SSH 터널을 설정하기 위해 upstart를 사용하려고 합니다. 나는 많은 고객을 보유하고 있으며 때때로 온라인과 오프라인으로 이동합니다. 이것이 지금 가지고 있는 것이지만 env 섹션이 명령 실행을 지원하지 않기 때문에 작동하지 않습니다.

description "Upstart Script to run sonarr as a service on Ubuntu/Debian based systems"
start on runlevel [2345]
stop on runlevel [016]
env PORT=$(curl http://ipvr.japayton.com/port.php)
env API=(sudo cat /home/kodi/IPVR/api)
respawn
exec autossh -nNT -i /home/root/.ssh/sshkeys -o ServerAliveInterval=15 -R $PORT:localhost:443 [email protected]
post-start exec ssh [email protected] 'sqlite3 /home/client/clients.db "UPDATE clients SET port = '$PORT' WHERE api = $API;"'

API와 출시 후는 그다지 중요하지 않습니다. SSH를 사용하는 대신 이러한 업데이트를 위한 API를 구축할 것이라고 생각하므로 이를 외부 스크립트에 넣을 수 있습니다. port.php는 역방향 터널에 사용 가능한 포트를 반환합니다.

autossh를 실행할 때 이 포트가 필요합니다. 스크립트 섹션을 만들어 일반 변수로 설정할 수 있다는 것을 알고 있지만 upstart는 autossh의 PID 대신 컬을 모니터링합니다. 외부 bash 스크립트를 사용하는 것이 작동하는지 모르겠습니다. 파일 시스템에 아무것도 쓰지 않고 싶습니다.

답변1

난 그렇게 생각하지 않아. 이 중 대부분은 자체 스크립트로 분할될 수 있거나 분할되어야 하는 것처럼 들리므로 귀하의 신생 기업은 다음과 같습니다.

description "Upstart Script to run sonarr as a service on Ubuntu/Debian based systems"
start on runlevel [2345]
stop on runlevel [016]

exec /usr/local/sbin/sonarr

그리고 /usr/local/sbin/sonarr는:

#!/bin/sh
PORT=$(curl http://ipvr.japayton.com/port.php)
API=$(cat /home/kodi/IPVR/api)

# Do this first because it's non-blocking
# And take care with quotes.
ssh [email protected] 'sqlite3 /home/client/clients.db "UPDATE clients SET port = '"'$PORT'"' WHERE api = '"'$API'"';"'

autossh -nNT -i /home/root/.ssh/sshkeys -o ServerAliveInterval=15 -R $PORT:localhost:443 [email protected]

이 스크립트에는 몇 가지 구문 문제가 있으므로 Upstart가 시작되지 않았다고 비난하기 전에 스크립트가 실행되고 있는지 확인하십시오.

관련 정보