
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ń.
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.
Accounts
➔ Groups
➔ ADD
.
Tworzę grupę o nazwie BACKUP
i na koniec klikam przycisk SUBMIT
.
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
.
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.
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:
Accounts
➔ Groups
➔ ADD
.
Tworzę grupę o nazwie BACKUP
i na koniec klikam przycisk SUBMIT
.
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
.
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.
imakler
, do którego będę pobierał kopie zapasowe, a w nim przygotowuję katalog .ssh
.
mkdir /mnt/ZEUS/_BACKUP/grzegorzwita.it/imakler/.ssh
imakler
.
ssh-keygen -t rsa -b 4096 -C "imakler@TrueNAS.ldm.arpa"
.ssh
i przechodzę do katalogu imakler
.
mv * /mnt/ZEUS/_BACKUP/grzegorzwita.it/imakler/.ssh && cd /mnt/ZEUS/_BACKUP/grzegorzwita.it/imakler
cp id_rsa.pub /mnt/ZEUS/_BACKUP/grzegorzwita.it
.ssh
.
chmod 700 .ssh
chown imakler .ssh
.ssh
i ustawiam odpowiednie uprawnienia do zawartości katalogu .ssh
.
chmod 600 *
chown imakler:BACKUP *
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
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
Pierwotnie konfigurowałem to na hostingu cyber-folks.pl, ale jest to też do zrobienia chociażby na hosting.linux.pl.
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.
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.