

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.