Não foi possível resolver host: content.dropboxapi.com quando fazer o upload do arquivo no desligamento

3

Quero fazer upload de um arquivo para minha caixa de depósito quando meu computador estiver sendo desligado.

sudo vim  /etc/systemd/system/upload.service
[Unit]
Description=upload files into dropbox
Before=network.target shutdown.target  reboot.target
Requires=network-online.target

[Service]
ExecStop=/bin/true
ExecStart=/bin/bash  /home/upload.sh 
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

E o script upload.sh.

cd  /home
curl -X POST https://content.dropboxapi.com/2/files/upload \
            --header "Authorization: Bearer xxxx" \
            --header "Dropbox-API-Arg:  {\"path\":\"/test.txt\",\"mode\":{\".tag\":\"overwrite\"}}" \
            --header "Content-Type: application/octet-stream" \
            --data-binary @"test.txt"

bash upload.sh pode ser executado com êxito e test.txt foi carregado para minha caixa de depósito.

sudo systemctl enable upload service  

Para reiniciar meu computador.

sudo journalctl -u upload 

Apr 13 23:58:52 localhost systemd[1]: Started upload files into dropbox.
Apr 13 23:58:52 localhost systemd[1]: Starting upload files into dropbox...
Apr 13 23:58:52 localhost bash[117]: % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
Apr 13 23:58:52 localhost bash[117]: Dload  Upload   Total   Spent    Left  Speed
Apr 13 23:58:52 localhost bash[117]: 0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0curl: (6) Could not resolve host: content.dropboxapi.com; Un
Apr 13 23:58:52 localhost systemd[1]: upload.service: main process exited, code=exited, status=6/NOTCONFIGURED
Apr 13 23:58:52 localhost systemd[1]: Unit upload.service entered failed state.
Apr 13 23:58:52 localhost systemd[1]: upload.service failed.

Algum erro de DNS Could not resolve host: content.dropboxapi.com resulta em falha no upload.service.

Eu adicionei Requires=network-online.target no upload.service, como fazer o analisador de DNS resolver o host no tempo de desligamento do meu PC?

    
por it_is_a_literature 14.04.2018 / 09:08

3 respostas

1

método 1: /etc/systemd/system/upload.service
1.1 /etc/systemd/system/upload.service

sudo vim  /etc/systemd/system/upload.service
[Unit]
Description=upload files into dropbox
Before=shutdown.target  reboot.target
Requires=network-online.target
After=network.target    

[Service]
ExecStop=/bin/true
ExecStart=/bin/bash  /home/upload.sh 
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

1.2 vim /home/upload.sh

cd  /home
curl -X POST https://content.dropboxapi.com/2/files/upload \
            --header "Authorization: Bearer xxxx" \
            --header "Dropbox-API-Arg:  {\"path\":\"/test.txt\",\"mode\":{\".tag\":\"overwrite\"}}" \
            --header "Content-Type: application/octet-stream" \
            --data-binary @"test.txt"

1.3 sudo systemctl ativar o serviço de upload

método 2: /lib/systemd/system-shutdown/upload.service
2.1 /lib/systemd/system-shutdown/upload.service

sudo vim  /lib/systemd/system-shutdown/upload.service
[Unit]
Description=upload files into dropbox
Before=shutdown.target  reboot.target
Requires=network-online.target
After=network.target    

[Service]
ExecStop=/bin/true
ExecStart=/bin/bash  /home/upload.sh 
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

2.2 vim /home/upload.sh

cd  /home
curl -X POST https://content.dropboxapi.com/2/files/upload \
            --header "Authorization: Bearer xxxx" \
            --header "Dropbox-API-Arg:  {\"path\":\"/test.txt\",\"mode\":{\".tag\":\"overwrite\"}}" \
            --header "Content-Type: application/octet-stream" \
            --data-binary @"test.txt"

2.3 sudo systemctl ativar /lib/systemd/system-shutdown/upload.service

    
por scrapy 17.04.2018 / 02:59
0

A melhor maneira de executar um programa ou script enquanto o sistema está inativo é usar ExecStop= da unidade para executar esse programa. O ExecStart= pode ser um script fictício (como /bin/true ) ou, em versões recentes do systemd, pode até ser omitido.

Em relação às dependências, você deseja colocar sua unidade após os serviços de que precisa, como network-online.target e talvez systemd-resolved.service , se estiver usando para resolução de DNS. A razão para isso é que os sistemas são parados no momento do desligamento na ordem inversa em que são iniciados. Então, ao solicitar seu serviço após as dependências, significa que o script ExecStop= será executado antes que as dependências sejam interrompidas.

Algo como isso deve funcionar:

[Unit]
Description=upload files into dropbox
After=network.target systemd-resolved.service
Requires=network-online.target

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/bin/true
ExecStop=/bin/bash /home/upload.sh 
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

Habilite a unidade como de costume (o argumento --now também inicia):

$ sudo systemctl enable --now upload.service

E ele fará o upload quando parou , com o qual você pode testar:

$ sudo systemctl stop upload.service

Isso foi recentemente discutido na lista de discussão do systemd-devel.

    
por Filipe Brandenburger 17.04.2018 / 07:57
0

Execstop e Execstart invertidos

De acordo com este Unix & Resposta do Linux: Como executar um script com o systemd logo antes do desligamento , o seu Execstop e o Execstart estão invertidos.

As linhas:

ExecStop=/bin/true
ExecStart=/bin/bash  /home/upload.sh

Deverá ler:

ExecStart=/bin/true
ExecStop=/bin/bash  /home/upload.sh

A resposta continua mencionando para reiniciar os serviços. Então, depois de criar o arquivo, certifique-se de systemctl daemon-reload e systemctl enable yourservice --now

Método alternativo não funciona

O before= , requires= , etc. pode ser confuso às vezes. Você pode colocar seu script no diretório /usr/lib/systemd/system-shutdown/ . Ele será executado imediatamente após o desligamento. Veja: link

O prefixo /usr pode ser diferente em alguns sistemas, ou seja, basta iniciar o nome do diretório com /lib .

    
por WinEunuuchs2Unix 16.04.2018 / 13:38