Encontrei este arquivo de serviço systemd para iniciar o autossh e manter um túnel ssh: https://gist.github.com/thomasfr/9707568
[Unit]
Description=Keeps a tunnel to 'remote.example.com' open
After=network.target
[Service]
User=autossh
# -p [PORT]
# -l [user]
# -M 0 --> no monitoring
# -N Just open the connection and do nothing (not interactive)
# LOCALPORT:IP_ON_EXAMPLE_COM:PORT_ON_EXAMPLE_COM
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -p 22 -l autossh remote.example.com -L 7474:127.0.0.1:7474 -i /home/autossh/.ssh/id_rsa
[Install]
WantedBy=multi-user.target
Existe uma maneira de configurar o systemd para iniciar vários túneis em um serviço.
Não quero criar arquivos de serviço do sistema N, pois quero evitar copiar e colar.
Todos os arquivos de serviço seriam idênticos, exceto que "remote.example.com" seria substituído por outros nomes de host.
1,5 ano depois ...
Eu fiz essa pergunta aproximadamente 1,5 ano atrás.
Minha mente mudou um pouco. Sim, é bom que você possa fazer isso com o systemd (eu ainda o uso), mas usarei o gerenciamento de configurações no futuro.
Por que o systemd deve implementar uma linguagem de modelo e substituir% h?
Vários meses depois, acho que esse loop e modelagem devem ser resolvidos com uma ferramenta que automatiza a configuração. Eu uso uma ferramenta desta lista na wikipedia agora.
Respostas:
Bem, assumindo que a única coisa que muda por arquivo de unidade é a
remote.example.com
parte, você pode usar um Serviço Instanciado .Na
systemd.unit
página do manual:Basicamente, você cria um único arquivo de unidade, que contém uma variável (geralmente
%i
) onde as diferenças ocorrem e, em seguida, elas são vinculadas quando você "ativa" esse serviço.Por exemplo, eu tenho um arquivo de unidade chamado
/etc/systemd/system/[email protected]
que se parece com isso:Que eu habilitei
E pode interagir com
Como você pode ver, todas as instâncias do
%i
arquivo de unidade são substituídas porsomehost.example.com
.Porém, existem muitos outros especificadores que você pode usar em um arquivo de unidade, mas acho
%i
que funciona melhor em casos como este.fonte
enable
ação é o que inicia uma unidade / serviço na inicialização.Aqui está um exemplo de python, que era o que eu estava procurando. O
@
nome do arquivo no serviço permite iniciar N processos:Vários métodos para chamá-lo
Ativando várias contagens, por exemplo:
Permita 30 trabalhadores:
Habilite 2 trabalhadores:
Certifique-se de recarregar:
Agora você pode iniciar / parar de várias maneiras:
Início 1:
Iniciar vários:
Parar vários:
Verificar status:
ATUALIZAÇÃO : para gerenciar instâncias como um serviço, você pode fazer algo assim:
/etc/systemd/system/[email protected]:
/usr/bin/some-worker-start.sh:
/etc/systemd/system/some-worker.service:
E agora você pode gerenciar todas as instâncias com
sudo systemctl some-worker (start|restart|stop)
Aqui está um exemplo para o seu
script.py
:fonte
systemctl some-worker (start|restart|stop)
saber em quais instâncias trabalhar?Now you can start/stop then in various ways
.A resposta de GregL me ajudou bastante. Aqui está um exemplo de um modelo de unidade que eu usei no meu código usando o exemplo acima para um servidor de tarefas gearman. Eu criei um script de shell que me permite criar uma quantidade X de "trabalhadores" usando este modelo.
fonte