O script de inicialização do Ubuntu 16.04 não está funcionando

0

Eu tenho um script simples (faça upload do dump dump postgresql para o google drive) e se eu executar este script no terminal, tudo funcionará bem. Agora eu quero executar este script na inicialização do sistema

Eu adiciono meu script à pasta /etc/init.d , o nome do script é gdrive-upload :

#! /bin/sh
### BEGIN INIT INFO
# Provides:          gdrive-upload
# Required-Start:    $local_fs $network
# Required-Stop:     $local_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Start daemon at boot time
# Description:       Enable service provided by daemon.
### END INIT INFO
sleep 60
while true; do 
    name=$(date -d "today" +"dev_%Y-%m-%d_%H:%M").dump
    PGPASSWORD='passToDB' pg_dump -h localhost -p 5432 -U lm -F c -b -v -f /postgresql/dump/${name} DBname
    gdrive upload /postgresql/dump/${name}
    sudo rm  /postgresql/dump/${name}
    sleep 3600
done
A transmissão do arquivo

deste arquivo é: 755

Para executar este script executável eu corro sudo chmod a+x /etc/init.d/gdrive-upload Depois disso, sem saída

Então sudo update-rc.d gdrive-upload defaults Depois disso:

perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
    LANGUAGE = (unset),
    LC_ALL = (unset),
    LC_CTYPE = "UTF-8",
    LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
insserv: warning: current stop runlevel(s) (1 6) of script 'gdrive-upload' overrides LSB defaults (0 1 6).

Mas o script não está sendo executado depois de sudo reboot

Mas se eu executar /etc/init.d/gdrive-upload no terminal, tudo funciona bem

    
por user2870934 13.03.2018 / 16:12

1 resposta

0

Já que você está no Ubuntu 16.04, que usa systemd , você pode querer usar a combinação de serviço nativo e temporizador systemd .

Coloque o trabalho real em um script. Por exemplo. /usr/local/sbin/gdrive-upload.sh

#!/bin/bash 

name=$(date -d "today" +"dev_%Y-%m-%d_%H:%M").dump
PGPASSWORD='passToDB' pg_dump -h localhost -p 5432 -U lm -F c -b -v -f /postgresql/dump/${name} DBname
gdrive upload /postgresql/dump/${name}
sudo rm  /postgresql/dump/${name}

Um arquivo /etc/systemd/system/gdrive-upload.service de serviço correspondente seria semelhante ao seguinte, mas pode precisar de alguns ajustes.

[Unit]
Description=Upload stuff to gdrive
After=network-online.target

[Service]
Type=simple
ExecStart=/usr/local/sbin/gdrive-upload.sh

[Install]
WantedBy=multi-user.target

Em seguida, você precisa de um systemd timer /etc/systemd/system/gdrive-upload.timer para executar o arquivo de serviço regularmente.

[Unit]
Description=Regularly upload stuff to gdrive

[Timer]
OnCalendar=*-*-* *:00:00
Persistent=true

[Install]
WantedBy=timers.target

Depois de criar os arquivos, você deve informar systemd de que há novos serviços disponíveis para retirada e ativar o cronômetro.

$ systemctl daemon-reload
$ systemctl enable gdrive-upload.timer
$ systemctl start gdrive-upload.timer

Não ative o gdrive-upload.service , pois isso será acionado pelo timer.

Agora você pode assistir ao seu timer quando ele foi acionado pela última vez e quando será acionado na próxima vez com systemclt list-timers .
Como já mencionado, você pode precisar ajustar o temporizador e o serviço um pouco, dependendo de suas necessidades.

    
por Thomas 13.03.2018 / 16:46