Problemas ao criar e ativar serviços systemd customizados para o ddclient

1

Estou usando ddclient / DDNS no Ubuntu 16.04 LTS para atualizar os IPs cujos dois domínios (de NameCheap) possuem um registro DNS para (isso está funcionando).

No entanto, o problema é que, com dois domínios, preciso de duas instâncias separadas do ddclient em execução. Eu comecei a escrever dois arquivos .service para fazer isso:

/usr/lib/systemd/system/ddclient_website1.service

[Unit]
Description=DDNS client for website1.tld

[Service]
ExecStart=/usr/sbin/ddclient -file /etc/ddclient_website1.conf

[Install]
WantedBy=multi-user.target

/usr/lib/systemd/system/ddclient_website2.service

[Unit]
Description=DDNS client for website2.tld

[Service]
ExecStart=/usr/sbin/ddclient -file /etc/ddclient_website2.conf

[Install]
WantedBy=multi-user.target

Com as configurações, especificadas nos comandos ExecStart, conforme especificado abaixo:

/etc/ddclient_website1.conf

daemon=1800
use=web, web=dynamicdns.park-your-domain.com/getip
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=domain_1.tld
password=first_ddns_password
server_name

/etc/ddclient_website2.conf

daemon=1800
use=web, web=dynamicdns.park-your-domain.com/getip
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=domain_2.tld
password=second_ddns_password
server_name

E usando systemctl enable ddclient_website1.service (o mesmo para website2) produz:

Created symlink from /etc/systemd/system/multi-user.target.wants/ddclient_website1.service to /usr/lib/systemd/system/ddclient_website1.service.

systemctl start ddclient_website1.service não produz saída.

ps -ef | grep ddclient lista apenas o grep que acabou de ser executado e systemctl status ddclient_website1.service produz:

● ddclient_website1.service - DDNS client for website1.tld
   Loaded: loaded (/usr/lib/systemd/system/ddclient_website1.service; enabled; vendor preset: enabled)
   Active: inactive (dead) since Sun 2016-12-18 15:34:23 EST; 39s ago
  Process: 2687 ExecStart=/usr/sbin/ddclient -file /etc/ddclient_website1.conf (code=exited, status=0/SUCCESS)
 Main PID: 2687 (code=exited, status=0/SUCCESS)

Dec 18 15:34:23 server_name systemd[1]: Started DDNS client for website1.tld.

Uma reinicialização não causa alterações positivas.

Editar:

Após a modificação dos arquivos .service no arquivo .service padrão criado durante a instalação do ddclient, agora posso iniciar os serviços (eles estão listados em ps -ef | grep ddclient .

[Unit]
Description=DDNS client for website1.tld
After=network.target

[Service]
Type=forking
PIDFile=/var/run/ddclient_website1.pid
ExecStart=/usr/sbin/ddclient -file /etc/ddclient_website1.conf

[Install]
WantedBy=default.target

No entanto, após a execução de 40 a 50 segundos, o tempo limite, indicando os arquivos PID que precisam acessar, não existe (mesmo problema para os dois serviços):

● ddclient_website1.service - DDNS client for website1.tld
   Loaded: loaded (/usr/lib/systemd/system/ddclient_website1.service; enabled; vendor preset: enabled)
   Active: failed (Result: timeout) since Sun 2016-12-18 16:04:14 EST; 22s ago
  Process: 1347 ExecStart=/usr/sbin/ddclient -file /etc/ddclient_website1.conf (code=exited, status=0/SUCCESS)

Dec 18 16:02:44 server_name systemd[1]: Starting DDNS client for website1.tld...
Dec 18 16:02:44 server_name systemd[1]: ddclient_website1.service: PID file /var/run/ddclient_website1.pid not readable (yet?) after start: No such file or directory
Dec 18 16:04:14 server_name systemd[1]: ddclient_website1.service: Start operation timed out. Terminating.
Dec 18 16:04:14 server_name systemd[1]: Failed to start DDNS client for website1.tld.
Dec 18 16:04:14 server_name systemd[1]: ddclient_website1.service: Unit entered failed state.
Dec 18 16:04:14 server_name systemd[1]: ddclient_website1.service: Failed with result 'timeout'.

Eu touch ed ddclient_website1.pid (também para website2) em /var/run e obtive o mesmo resultado.

    
por Sean Pianka 18.12.2016 / 21:37

3 respostas

0

O problema era que eu não tinha especificado onde o cache e o arquivo PID seriam localizados no ddclient.

De acordo com a página --help :

  -file path            : load configuration information from 'path' (default: /etc/ddclient.conf).
  -cache path           : record address used in 'path' (default: /var/cache/ddclient/ddclient.cache).
  -pid path             : record process id in 'path'.

Meu comando ExecStart especificou apenas -file , enquanto eu precisava também especificar -cache e -pid .

Aqui está meu ddclient_website1.service:

[Unit]
Description=DDNS client for website1.tld
After=network.target

[Service]
Type=forking
PIDFile=/var/run/ddclient_website1.pid
ExecStart=/usr/sbin/ddclient -file /etc/ddclient_website1.conf -pid /var/run/ddclient_website1.pid -cache /var/cache/ddclient/ddclient_website1.cache

[Install]
WantedBy=default.target

Você também pode especificar esses caminhos no arquivo de configuração do ddclient, em /etc/ddclient_website1.conf :

daemon=1800
use=web, web=dynamicdns.park-your-domain.com/getip
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=website1.tld
password=my_ddns_password
cache=/var/cache/ddclient/ddclient_website1.cache
pid=/var/run/ddclient_website1.pid
@

Agora você deve conseguir executar systemctl enable ddclient_website1.service e systemctl start ddclient_website1.service e fazer com que o ddclient comece a funcionar.

    
por 19.12.2016 / 00:00
0

Isso pode estar relacionado , tente alterando a seção [Install] para

[Install]
WantedBy=default.target
    
por 18.12.2016 / 22:00
0
[Service]
ExecStart=/usr/sbin/ddclient -file /etc/ddclient_website1.conf

O uso das configurações PIDFile e Type=forking no arquivo INI está incorreto, assim como a opção -pid do programa. Este programa (como com tantos) não implementa o protocolo relevante de prontidão.

A maneira correta de proceder, assim como com tantos outros softwares, é empregar a opção -foreground do programa, que ela tem desde a revisão 113 de acordo com seu documento.

Leitura adicional

por 29.10.2018 / 23:24