Сценарий запуска Ubuntu 16.04, не работающий

У меня есть простой сценарий (загрузите postgresql дамп дб для поиска с помощью Google диска), и если я запускаю этот скрипт в терминале, все хорошо работает. Теперь я хочу запустить этот скрипт при системном запуске

Я добавляю свой сценарий к папке /etc/init.d, название сценария 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

файл prmission этого файла: 755

Чтобы сделать этот исполняемый файл сценария, я работаю sudo chmod a+x /etc/init.d/gdrive-upload После этого никакого вывода

Затем sudo update-rc.d gdrive-upload defaults После этого:

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).

Но сценарий не бежит sudo reboot

Но если я работаю /etc/init.d/gdrive-upload в терминале все хорошо работает

0
задан 13 March 2018 в 08:12

1 ответ

Так как Вы находитесь на Ubuntu 16.04, которая использует systemd Вы могли бы хотеть использовать systemd собственный сервис и комбинация таймера.

Поместите фактическую работу в сценарий. Например. /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}

Соответствующий сервис /etc/systemd/system/gdrive-upload.service файл был бы похож следующим образом, но, возможно, нуждался бы в некоторых тонких настройках.

[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

Затем Вам нужен a systemd таймер /etc/systemd/system/gdrive-upload.timer выполнять сервисный файл регулярно.

[Unit]
Description=Regularly upload stuff to gdrive

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

[Install]
WantedBy=timers.target

После создания файлов, необходимо сказать systemd то, что существуют новые сервисы, доступные погрузке, и включают таймер.

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

Не включайте gdrive-upload.service поскольку это будет инициировано таймером.

Теперь можно наблюдать таймер, когда он был инициирован в последний раз и когда он будет инициирован в следующий раз с systemclt list-timers.
Как уже упомянуто, Вы, возможно, должны настроить таймер и сервис немного, в зависимости от Ваших потребностей.

0
ответ дан 30 October 2019 в 06:46

Другие вопросы по тегам:

Похожие вопросы: