Em nosso post anterior Criar um serviço systemd para seu projeto docker-compose em 10 segundos introduzimos um script que cria automaticamente um serviço systemd para iniciar um projeto baseado em docker-compose. Neste post, mostraremos
Primeiro, você precisa criar um arquivo chamado backup.sh no diretório onde docker-compose.yml está localizado. Este arquivo será rodado pelo serviço systemd todos os dias. O que esse arquivo contém é inteiramente com você e forneceremos exemplos em futuros posts de blog.
Em segundo lugar, rode
wget -qO- https://techoverflow.net/scripts/create-backup-service.sh | sudo bash /dev/stdindo diretório onde docker-compose.yml está localizado. Note que o script usará o nome do diretório como nome para o serviço e timer que é criado. Por exemplo, rodar o script em /var/lib/redmine-mydomain fará com que redmine-mydomain-backup seja usado como nome de serviço.
Exemplo de saída do script:
Creating systemd service... /etc/systemd/system/redmine-mydomain-backup.service
Creating systemd timer... /etc/systemd/system/redmine-mydomain-backup.timer
Enabling & starting redmine-mydomain-backup.timer
Created symlink /etc/systemd/system/timers.target.wants/redmine-mydomain-backup.timer → /etc/systemd/system/redmine-mydomain-backup.timer.O script criará /etc/systemd/systemd/redmine-mydomain-backup.service contendo a especificação de o que exatamente rodar:
[Unit]
Description=redmine-mydomain-backup
[Service]
Type=oneshot
ExecStart=/bin/bash backup.sh
WorkingDirectory=/var/lib/redmine-mydomaine /etc/systemd/systemd/redmine-mydomain-backup.timer contendo a lógica de quando o .service é iniciado:
[Unit]
Description=redmine-mydomain-backup
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.targete iniciará e habilitará automaticamente o timer. Isso significa: nenhum passo adicional é necessário após rodar este script!
Para mostrar o status atual do serviço, use e.g.
sudo systemctl status redmine-mydomain-backup.timerExemplo de saída:
● redmine-mydomain-backup.timer - redmine-mydomain-backup
Loaded: loaded (/etc/systemd/system/redmine-mydomain-backup.timer; enabled; vendor preset: enabled)
Active: active (waiting) since Thu 2020-12-10 02:50:31 CET; 19min ago
Trigger: Fri 2020-12-11 00:00:00 CET; 20h left
Triggers: ● redmine-mydomain-backup.service
Dec 10 02:50:31 myserverhostname systemd[1]: Started redmine-mydomain-backup.Na linha
Trigger: Fri 2020-12-11 00:00:00 CET; 20h leftvocê pode ver quando o serviço será rodado a seguir. Por padrão, o script gera tarefas que rodam OnCalendar=daily, o que significa que o serviço será rodado às 00:00:00 todos os dias. Confira a página man do systemd.time para mais informações sobre a sintaxe que você pode usar para especificar outros períodos de tempo.
Para rodar o backup imediatamente (ele ainda rodará diariamente após fazer isso), faça
sudo systemctl start redmine-mydomain-backup.service(note que você precisa rodar systemctl start no .service! Rodar systemctl start no .timer apenas habilitará o timer e não rodará o serviço imediatamente).
Para ver os logs, use
sudo journalctl -xfu redmine-mydomain-backup.service(assim como acima, você precisa rodar journalctl -xfu no .service, não no .timer).
Para desabilitar backups automáticos, use e.g.
sudo systemctl disable redmine-mydomain-backup.timerCódigo fonte:
#!/bin/bash
# Create a systemd service & timer that runs the given backup daily
# by Uli Köhler - https://techoverflow.net
# Licensed as CC0 1.0 Universal
export SERVICENAME=$(basename $(pwd))-backup
export SERVICEFILE=/etc/systemd/system/${SERVICENAME}.service
export TIMERFILE=/etc/systemd/system/${SERVICENAME}.timer
echo "Creating systemd service... $SERVICEFILE"
sudo cat >$SERVICEFILE <<EOF
[Unit]
Description=$SERVICENAME
[Service]
Type=oneshot
ExecStart=/bin/bash backup.sh
WorkingDirectory=$(pwd)
EOF
echo "Creating systemd timer... $TIMERFILE"
sudo cat >$TIMERFILE <<EOF
[Unit]
Description=$SERVICENAME
[Timer]
OnCalendar=daily
Persistent=true
[Install]
WantedBy=timers.target
EOF
echo "Enabling & starting $SERVICENAME.timer"
sudo systemctl enable $SERVICENAME.timer
sudo systemctl start $SERVICENAME.timer