Background : Estou configurando Transmission (v2.93) e OpenVPN (v2.4.6) em uma jaula (uma cadeia de plugins FreeNAS 11.1) e quero adicionar um script --up
ao OpenVPN que solicitará Transmission para alterar sua porta de escuta (usando o programa transmission-remote
).
Meu openvpn.conf
contém o seguinte (entre outros):
verb 4
script-security 2
up /usr/local/etc/openvpn/set_port.sh
up-restart ;only to make the up script be executed on restarts
;but disabling this changes nothing
e o script set_port.sh
contém (um script mínimo que ainda reproduz o comportamento):
#!/usr/local/bin/bash
/usr/local/bin/transmission-remote --auth rpc_user:rpc_pass -p 6666 2>&1 > output.txt
echo 'the script itself runs: '$(pwd) $(whoami) > status.txt
O script tem todas as permissões (777) e o binário ( transmission-remote
) tem todas as permissões. Estou ciente de que o caminho para o binário é na verdade um link flexível, então eu o substitui pelo caminho real ( /usr/pbi/transmission-amd64/.sbin/transmission-remote
), mas o comportamento que observo é o mesmo.
Problema : quando eu inicio o OpenVPN ( service openvpn start
), o próprio script é executado, mas o comando atual falha misteriosamente: a porta não está sendo atribuída (verificada) olhando através de Transmissão Remota GUI e o comando gera saída vazia.
O conteúdo dos arquivos de depuração é o seguinte:
output.txt
está vazio (com e sem redirecionamento stderr )
status.txt
diz como esperado: the script itself runs: /usr/local/etc/openvpn root
.
No entanto, quando eu executar este script manualmente ( ./set_port.sh
), o comando mencionado será concluído com êxito: output.txt
dirá localhost:9091/transmission/rpc/ responded: "success"
e a porta será alterada.
O que estou perdendo?
Similar para esta pergunta , exceto que não estou recebendo nenhuma "permissão negada" mensagens - parece que o comando não é sequer executado (se eu echo $(<that command>) > file.txt
, eu recebo um arquivo vazio). This one também é um pouco relacionado, mas o OP está perguntando sobre --client-connect
e eventualmente resolve o problema escrevendo caminhos completos para os programas que eles querem executar - isso não ajudou no meu caso (mas se eu echo $(ls /usr/local/bin) > log.txt
, o lista de binários está correta).
Atualizar por solicitação do @ roaima. Eu mudei o set_port.sh
para o seguinte:
#!/usr/local/bin/bash
exec >debug.txt 2>&1
set -x
echo script is running
/usr/pbi/transmission-amd64/.sbin/transmission-remote --auth rpc_user:rpc_pass -p 6666 2>&1 > output.txt
depois enxaguado e repetido. O arquivo debug.txt
continha estas linhas:
+ echo script is running
script is running
+ /usr/pbi/transmission-amd64/.sbin/transmission-remote --auth rpc_user:rpc_pass -p 12345
/usr/local/etc/openvpn/test.sh: line 5: 6795 Segmentation fault /usr/pbi/transmission-amd64/.sbin/transmission-remote --auth rpc_user:rpc_pass -p 12345 2>&1 > output.txt