Eu escrevi um arquivo systemd para iniciar meu serviço VPN usando um arquivo de configuração específico. O que eu gostaria de poder fazer é substituir esse arquivo por um arquivo de configuração selecionado aleatoriamente toda vez que o serviço for iniciado.
Até agora eu tentei usar
ExecStartPre=cp -f `ls /etc/openvpn/ovpn_udp/au* | shuf -n 1` /etc/openvpn/%i.conf
para copiar o arquivo escolhido aleatoriamente para o arquivo de configuração especificado. Algumas alternativas que tentei são
- usou rsync -c em vez de cp
- aspas duplas em todo o comando ExecStartPre
- escapando do `
Finalmente, também tentei o seguinte ExecStart para
ExecStart=/usr/sbin/openvpn --config `ls /etc/openvpn/ovpn_udp/au* | shuf -n 1`
Tudo sem efeito.
Atualmente, o arquivo systemd é o seguinte
[Unit]
Description=OpenVPN Robust And Highly Flexible Tunneling Application On %I
After=network.target
[Service]
Type=notify
PrivateTmp=true
ExecStartPre=cp -f `ls /etc/openvpn/ovpn_udp/au* | shuf -n 1` /etc/openvpn/%i.conf
ExecStart=/usr/sbin/openvpn --config /etc/openvpn/%i.conf
[Install]
WantedBy=multi-user.target
Espero que o arquivo de configuração seja alterado antes de cada início do serviço, mas até agora não vejo nenhum erro ou o arquivo de configuração sendo substituído.
Qualquer ajuda será muito apreciada.
Obrigado
O comando ExecStart= não é executado por um shell e não fornece os recursos usuais de linguagem de shell. As únicas coisas que tem são aspas e substituição de variável $ - mas não tem pipes ou `backticks` ou $ (substituição de comando).
Para usar esses recursos, a) execute explicitamente um shell como /bin/sh:
ou b) mova seus comandos para um script de shell e execute -o em ExecStart=.
Observe que o próprio OpenVPN já suporta declarar vários servidores dentro da mesma configuração , usando
<connection>
blocos e--remote-random
, conforme mostrado em sua página de manual:Obrigado @grawity que esclarece muito as coisas. Utilizando sua resposta, agora modifiquei com sucesso meu arquivo de serviço systemd para o seguinte, que faz exatamente o que preciso.