Plano de fundo
Eu quero mudar algumas opções do Pure-FTPD. Como não tem arquivo de configuração, eu preciso adicionar argumentos de linha de comando. Meu sistema é o Debian Stretch, que usa o systemd.
O que eu tentei
Não há arquivo pure-ftpd.service em /etc/systemd/*
nem em /usr/lib/systemd/*
. Eu corri updatedb
e, em seguida, locate pure-ftpd
, o que não deu resultados. Executar systemctl status pure-ftpd
(ou outros comandos como reiniciar) funciona bem.
Finalmente, encontrei uma maneira de fazer edições: systemctl edit pure-ftpd
. Como sugerido por outra resposta neste site , digitei [Service] \n ExecStart=/usr/sbin/pure-ftpd -my options
e pressione :wq
. O Systemd recarrega o serviço e tudo está bem.
Executando systemctl status pure-ftpd
, isso me diz:
pure-ftpd.service: Service has more than one ExecStart= setting, which is only allowed for Type=oneshot services. Refusing.
Eu não sei o que é um serviço pessoal. A documentação não diz quando usar qual, apenas "espera-se que o processo saia antes que o systemd inicie as unidades de acompanhamento". Não quero que o systemd espere que o pure-ftpd saia antes de iniciar outras "unidades" (outros serviços?), O que não é uma opção.
Grepping para pure
( grep -r pure
) em /etc/systemd
e /usr/lib/systemd
fornece apenas o resultado que eu mesmo criei: /etc/systemd/system/pure-ftpd.service.d/override.conf
. Não parece haver um arquivo de serviço, mas ele se queixa de uma opção ExecStart duplamente definida.
Chamar /etc/init.d/pure-ftpd
diretamente também não funciona. Rastreando esse script de shell, vejo o systemd ligado a isso e o seqüestra.
Eu também corri strace systemd restart pure-ftpd
. Percorrendo, isso chama minha atenção:
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/run/systemd/private"}, 22) = 0
sendmsg(3, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC|SOCK_NONBLOCK, 0) = 3
connect(3, {sa_family=AF_UNIX, sun_path="/run/systemd/private"}, 22) = 0
sendmsg(3, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="%pre%AUTH EXTERNAL ", iov_len=15}, {iov_base="30", iov_len=2}, {iov_base="\r\nNEGOTIATE_UNIX_FD\r\nBEGIN\r\n", iov_len=28}], msg_iovlen=3, msg_controllen=0, msg_flags=0}, MSG_DONTWAIT|MSG_NOSIGNAL) = 45
sendmsg(3, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="l$%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%%pre%o%pre%%pre%%pre%%pre%/org/fre"..., iov_len=176}, {iov_base="%pre%%pre%%pre%pure-ftpd.service%pre%%pre%%pre%%pre%%pre%%pre%repl"..., iov_len=36}], msg_iovlen=2, msg_controllen=0, msg_flags=0}, MSG_DONTWAIT|MSG_NOSIGNAL) = 212
---------------------->---------------------->---------------------->---------------------->---------------------->--------------------------^^^
AUTH EXTERNAL ", iov_len=15}, {iov_base="30", iov_len=2}, {iov_base="\r\nNEGOTIATE_UNIX_FD\r\nBEGIN\r\n", iov_len=28}], msg_iovlen=3, msg_controllen=0, msg_flags=0}, MSG_DONTWAIT|MSG_NOSIGNAL) = 45
sendmsg(3, {msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="l$%pre%%pre%%pre%%pre%%pre%%pre%0%pre%%pre%%pre%o%pre%%pre%%pre%%pre%/org/fre"..., iov_len=176}, {iov_base="%pre%%pre%%pre%pure-ftpd.service%pre%%pre%%pre%%pre%%pre%%pre%repl"..., iov_len=36}], msg_iovlen=2, msg_controllen=0, msg_flags=0}, MSG_DONTWAIT|MSG_NOSIGNAL) = 212
---------------------->---------------------->---------------------->---------------------->---------------------->--------------------------^^^
Portanto, envia algo sobre "
sobre um soquete unix. E, evidentemente, o systemd entende o que está falando. Parece-me como se houvesse um arquivo de serviço de modelo que é usado por padrão se o real estiver ausente. /run/systemd/private
systemctl disable pure-ftpd
init.d
pure-ftpd.servicepure-ftpd-wrapper
%code%%code%%code%%code%%code%repl"...
Anexando strace ao proprietário de %code% (sem surpresa: PID 1 / init), vejo a autenticação e a mensagem freedesktop chegando, após o que ela responde imediatamente com uma mensagem de erro sobre o serviço não ter sido carregado corretamente. Nunca verifica a existência de nenhum arquivo nem lê de nenhum.
Soluções alternativas
Pergunta
Como posso fornecer opções adicionais de linha de comando?