27.03.2023
Obsługa Cron Jobs w TrueNAS CORE
KonfiguracjaTrueNAS CORE
truenascorecronjobs

Ostatnia aktualizacja: 22.05.2023 r.

Cron Jobs to kolejna przydatna funkcjonalność TrueNAS`a umożliwiająca automatyzację zadań. Poniżej moje przykłady zastosowań.

Przerzucanie kopii zapasowych między basenami w ramach tego samego serwera

Zadanie ma na celu w trybie cichym, rekurencyjnie skopiować całe pliki kopii zapasowych maszyn wirtualnych Proxmox z puli ZEUS do puli POSEJDON w ramach tego samego urządzenia, a na koniec usunąć z puli POSEJDON pliki starsze niż 4 dni.

  1. Accounts ➔ Groups ➔ ADD.

    Tworzę grupę o nazwie BACKUP i na koniec klikam przycisk SUBMIT.

  2. Accounts ➔ Users ➔ ADD.

    W polach Full Name* oraz Username* wpisuję Backup, natomiast w polu Primary group wybieram grupę BACKUP, a resztę ustawień pozostawiam w wartościach domyślnych i na koniec klikam przycisk SUBMIT.

  3. Tasks ➔ Cron Jobs ➔ ADD.

    W polu Description wprowadzam opis zadania. Dalej, w polu Command* wprowadzam polecenie:

    rsync -rqW --inplace /mnt/ZEUS/_BACKUP/dump/ /mnt/POSEJDON/_BACKUP/PROXMOX/ && find /mnt/POSEJDON/_BACKUP/PROXMOX/* -mtime +4 -delete

    Następnie w polu Run As User* wpisuję konto Backup, a na koniec w polu Schedule* wybieram Custom (0 0 * * *) i ustawiam, aby zadanie uruchamiało się codziennie o 04:00 nad ranem. Zapisuję zadanie klikając przycisk SUBMIT.

W/w ustawienie zabezpiecza przed awarią pool`a, ale nie urządzenia.

Pobieranie plików kopii zapasowej bazy danych MySQL z hostingu WWW

Zadanie ma na celu ściągnięcie plików *.zip z katalogu backup na hostingu WWW, na którym działa dedykowany portal. Tak naprawdę składa się ono z czterech kroków:

  1. Zadanie cron w TrueNAS.
    1. Accounts ➔ Groups ➔ ADD.

      Tworzę grupę o nazwie BACKUP i na koniec klikam przycisk SUBMIT.

    2. Accounts ➔ Users ➔ ADD.

      W polach Full Name* oraz Username* wpisuję imakler, natomiast w polu Primary group wybieram grupę BACKUP, a resztę ustawień pozostawiam w wartościach domyślnych i na koniec klikam przycisk SUBMIT.

    3. Tasks ➔ Cron Jobs ➔ ADD.

      W polu Description wprowadzam opis zadania. Dalej, w polu Command* wprowadzam polecenie:

      scp -P 222 -p imakler@192.168.1.1:/home/gwita/backup/* /mnt/ZEUS/_GWIT/grzegorzwita.it/

      Następnie w polu Run As User* wpisuję konto imakler, a na koniec w polu Schedule* wybieram Custom (0 0 * * *) i ustawiam, aby zadanie uruchamiało się codziennie o 00:01 po północy. Zapisuję zadanie klikając przycisk SUBMIT.

    W/w konfiguracja może wywołać błąd przy pierwszym uruchomieniu, o czym nieco niżej.

  2. Klucze SSH na SMB w TrueNAS.
    1. Na odpowiedniem udziale SMB tworzę katalog imakler, do którego będę pobierał kopie zapasowe, a w nim przygotowuję katalog .ssh.
      mkdir /mnt/ZEUS/_BACKUP/grzegorzwita.it/imakler/.ssh
    2. Generuję parę kluczy SSH dla konta imakler.
      ssh-keygen -t rsa -b 4096 -C "imakler@TrueNAS.ldm.arpa"
    3. Przenoszę wygenerowane klucze do w/w katalogu .ssh i przechodzę do katalogu imakler.
      mv * /mnt/ZEUS/_BACKUP/grzegorzwita.it/imakler/.ssh && cd /mnt/ZEUS/_BACKUP/grzegorzwita.it/imakler
    4. Kopiuję klucz publiczny do innego katalogu.
      cp id_rsa.pub /mnt/ZEUS/_BACKUP/grzegorzwita.it
    5. Ustawiam odpowiednie uprawnienia do katalogu .ssh.
      chmod 700 .ssh
      chown imakler .ssh
    6. Przechodzę do katalogu .ssh i ustawiam odpowiednie uprawnienia do zawartości katalogu .ssh.
      chmod 600 *
      chown imakler:BACKUP *
  3. Skrypt batch na hostingu.
    1. Przygotowuję folder backup w katalogu domowym swojego konta użytkownika, w którym będę przechowywał lokalne kopie zapasowe oraz ustawiam odpowiednie uprawnienia do tego folderu.
      mkdir backup && chmod 775 backup
    2. Przygotowuję skrypt kopia_zapasowa.sh w katalogu domowym swojego konta użytkownika i ustawiam uprawnienia do wykonywania.
      #!/bin/bash
      DATE=$(date +"%Y-%m-%d")
      
      mysqldump --host=localhost --user=nazwa_konta_mysql --password='N1gdy_nie-zgadni3szhaha' nazwa_bazy_danych > /home/gwita/MYSQL_$DATE.sql
      tar -C /home/gwita -caf nazwa_bazy_danych_$DATE.tar MYSQL_$DATE.sql
      mv nazwa_bazy_danych_$DATE.tar /home/gwita/backup
      find /home/gwita -type f -name '*.sql' -delete
      find /home/gwita/backup -type f -name '*.tar' -mtime +7 -delete
      chmod +x kopia_zapasowa.sh
  4. Zadanie cron i klucz autoryzacji SSH w panelu administracyjnym hostingu.

    Pierwotnie konfigurowałem to na hostingu cyber-folks.pl, ale jest to też do zrobienia chociażby na hosting.linux.pl.

    1. direct_Admin ➔ domena ➔ Pozostałe ustawienia ➔ Zadania CRON.

      W sekcji Dodaj nowe zadanie ustawiam zadanie, aby było uruchamiane codziennie o 00:00 z komendą:

      /home/gwita/kopia_zapasowa.sh >/dev/null 2>&1

      Przyciskiem Dodaj > dodaję zadanie do listy.

    2. direct_Admin ➔ domena ➔ Pozostałe ustawienia ➔ Klucze SSH.

      W sekcji Wklej istniejący klucz SSH wklejam wygenerowany w TrueNAS klucz publiczny.

Jak wspomniałem wcześniej, pierwsze uruchomienie crona może skutkować błędem:

Host key verification failed.
Executed CronTask - scp -P 222 -p imakler@192.168.1.1:/home/gwita/backup/* /mnt/ZEUS/_GWIT/grzegorzwita.it/ > /dev/null: Host key verification failed.

W celu jego rozwiązania należy tymczasowo zmodyfikować komendę crona na:

scp -P 222 -p -o StrictHostKeyChecking=no imakler@192.168.1.1:/home/gwita/backup/* /mnt/ZEUS/_GWIT/grzegorzwita.it/

Ponowne uruchomienie crona, w przypadku poprawnego ustawienia uprawnień, zakończy się co prawda pomyślnie, jednak będzie skutkować komunikatem:

Warning: Permanently added '[192.168.1.1]:222' (ED25519) to the list of known hosts.
Executed CronTask - scp -P 222 -p -o StrictHostKeyChecking=no imakler@192.168.1.1:/home/gwita/backup/* /mnt/ZEUS/_GWIT/grzegorzwita.it/ > /dev/null: Warning: Permanently added '[192.168.1.1]:222' (ED25519) to the list of known hosts.

Złe uprawnienia wywołają komunikat:

Failed to add the host to the list of known hosts (/mnt/ZEUS/_GWIT/grzegorzwita.it/.ssh/known_hosts).
Load key "/mnt/ZEUS/_GWIT/grzegorzwita.it/imakler/.ssh/id_rsa": Permission denied
Permission denied, please try again.
Permission denied, please try again.
imakler@192.168.1.1: Permission denied (publickey,password).
Executed CronTask - scp -P 222 -p -o StrictHostKeyChecking=no imakler@192.168.1.1:/home/gwita/backup/* /mnt/ZEUS/_GWIT/grzegorzwita.it/ > /dev/null: Failed to add the host to the list of known hosts (/mnt/ZEUS/_GWIT/grzegorzwita.it/imakler/.ssh/known_hosts).
Load key "/mnt/ZEUS/_GWIT/grzegorzwita.it/imakler/.ssh/id_rsa": Permission denied
Permission denied, please try again.
Permission denied, please try again.
imakler@192.168.1.1: Permission denied (publickey,password).

Złe uprawnienia do lokalizacji, np. root jako właściciel, wywołają komunikat:

/mnt/ZEUS/_GWIT/grzegorzwita.it//nazwa_bazy_danych_2023-03-06.tar: set mode: Operation not permitted
/mnt/ZEUS/_GWIT/grzegorzwita.it//nazwa_bazy_danych_2023-03-07.tar: set mode: Operation not permitted
Executed CronTask - scp -P 222 -p -o StrictHostKeyChecking=no imakler@192.168.1.1:/home/gwita/backup/* /mnt/ZEUS/_GWIT/grzegorzwita.it/ > /dev/null: /mnt/ZEUS/_GWIT/grzegorzwita.it//nazwa_bazy_danych_2023-03-06.tar: set mode: Operation not permitted
/mnt/ZEUS/_GWIT/grzegorzwita.it//nazwa_bazy_danych_2023-03-07.tar: set mode: Operation not permitted

Złe uprawnienia katalogu użytkownika wywołają komunikat:

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0070 for '/mnt/ZEUS/_GWIT/grzegorzwita.it/imakler/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/mnt/ZEUS/_GWIT/grzegorzwita.it/imakler/.ssh/id_rsa": bad permissions
Permission denied, please try again.
Permission denied, please try again.
imakler@192.168.1.1: Permission denied (publickey,password).
Executed CronTask - scp -P 222 -p -o StrictHostKeyChecking=no imakler@192.168.1.1:/home/gwita/backup/* /mnt/ZEUS/_GWIT/grzegorzwita.it/ > /dev/null:
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ WARNING: UNPROTECTED PRIVATE KEY FILE! @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0070 for '/mnt/ZEUS/_GWIT/grzegorzwita.it/imakler/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/mnt/ZEUS/_GWIT/grzegorzwita.it/imakler/.ssh/id_rsa": bad permissions
Permission denied, please try again.
Permission denied, please try again.
imakler@192.168.1.1: Permission denied (publickey,password).

Jeśli uprawnienia są poprawne, to należy ustawić komendę do jej pierwotnej postaci i profilaktycznie uruchomić crona, który powinien wykonać się poprawnie bez komunikatów.

0 komentarzy

Szybki kontakt

Masz pytania? Napisz