
upstart를 사용하여 클라이언트에 대한 역방향 SSH 터널을 만들려고 합니다. 나는 많은 고객을 보유하고 있으며 분명히 때때로 온라인에 접속하거나 오프라인으로 오곤합니다. 이것이 내가 지금 가지고 있는 것이지만 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 실행 시 해당 포트가 필요합니다. 나는 스크립트 스탠자를 만들어 일반 변수처럼 설정할 수 있다는 것을 알고 있지만 시작은 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가 실행되지 않았다고 비난하기 전에 해당 스크립트를 실행했는지 확인하십시오.