来自命令的新贵环境变量

来自命令的新贵环境变量

我正在尝试使用 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 和启动后并不是那么重要。我可以将其放入外部脚本中,因为我想我将为这些更新构建一个 API,而不是使用 ssh。 port.php 返回反向隧道的可用端口。

我在执行 autossh 时需要该端口。我知道我可以制作一个脚本节并将其设置为常规变量,但暴发户会监视curl而不是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 未启动该脚本之前,请确保该脚本已运行。

相关内容