Jednym z przykładów automatyzacji zadań administratora systemem Linux za pomocą Pythona jest skrypt, który regularnie tworzy kopie zapasowe ważnych plików i katalogów systemu.
Ten skrypt tworzy kopie zapasowe ważnych plików i katalogów systemu, a następnie przechowuje je w nowym katalogu o nazwie zawierającej bieżącą datę. Skrypt korzysta z modułów os i shutil, które umożliwiają operacje na plikach i katalogach, oraz modułu datetime, który umożliwia tworzenie nazwy katalogu na podstawie bieżącej daty i czasu. Skrypt można uruchomić z poziomu wiersza poleceń lub dodać go do harmonogramu zadań systemu Linux, aby tworzyć kopie zapasowe automatycznie w regularnych odstępach czasu.
Zapraszamy na darmowe szkolenie "Grafana dla początkujących".
Widzimy się 17 października o 13:00! . Zapisz się: https://asdevops.pl/s43/
Prosty przykład skryptu
Załóżmy, że chcemy napisać skrypt w Pythonie, który będzie automatycznie tworzył kopię zapasową określonego katalogu i przesyłał ją do wskazanego katalogu w systemie.
W pierwszym etapie importujemy potrzebne moduły:
- os – służy do obsługi funkcji związanych z systemem operacyjnym,
- datetime – do pracy z datami i czasami,
- subprocess – do uruchamiania procesów z poziomu Pythona.
import os
import datetime
import subprocess
Funkcja create_backup() tworzy kopię zapasową plików z podanego katalogu. Na początku funkcja pobiera aktualny czas i datę, a następnie usuwa ewentualny ukośnik na końcu ścieżki do katalogu. Następnie funkcja tworzy nazwę pliku kopii zapasowej na podstawie nazwy katalogu, aktualnego czasu i daty.
Ostatnim etapem funkcji jest wywołanie procesu tar, który tworzy plik archiwum z podanego katalogu i zapisuje go pod wygenerowaną nazwą. Funkcja zwraca nazwę utworzonego pliku.
def create_backup(directory):
timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
directory = directory.rstrip('/') # usuń ukośnik na końcu, jeśli istnieje
backup_filename = os.path.join('/home/kali/Documents/backups',
f'{os.path.basename(directory)}_{timestamp}.tar.gz')
subprocess.run(['tar', '-czvf', backup_filename, directory])
return backup_filename
Funkcja main() jest wywoływana jako punkt startowy programu. Na początku funkcja przypisuje wartość ścieżki do katalogu, który ma być zarchiwizowany a następnie wywołuje funkcję create_backup() przypisuje wynik do zmiennej backup_filename.
Kopia zapasowa jest tworzona dla katalogu /home/kali/Documents oraz zapisywana jest w katalogu /home/kali/Documents/backups .
Nazwa pliku kopii zapasowej zawiera nazwę katalogu, który jest archiwizowany (bez ścieżki), a następnie data i godzina utworzenia kopii zapasowej w formacie „RRRRMMDDGGMMSS”, gdzie „RRRR” oznacza rok, „MM” miesiąc, „DD” dzień, „GG” godzina, „MM” minuta i „SS” sekunda. Nazwa pliku kończy się rozszerzeniem .tar.gz .
Ostatnim etapem funkcji jest wyświetlenie komunikatu z nazwą utworzonego pliku kopii zapasowej.
def main():
directory = '/home/kali/Documents'
backup_filename = create_backup(directory)
print(f'Utworzono kopię zapasową w pliku: {backup_filename}')
Poniższy warunek sprawdza, czy moduł uruchamia się bezpośrednio (jako skrypt), czy importowany jako moduł. Jeśli moduł jest uruchamiany bezpośrednio, to wywoływana jest funkcja main() . Jeśli moduł jest importowany, to funkcja main() nie jest wywoływana.
if __name__ == '__main__':
main()
Kod w całości prezentuje się w następująco:
import os
import datetime
import subprocess
def create_backup(directory):
timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
directory = directory.rstrip('/') # usuń ukośnik na końcu, jeśli
istnieje
backup_filename = os.path.join('/home/kali/Documents/backups',
f'{os.path.basename(directory)}_{timestamp}.tar.gz')
subprocess.run(['tar', '-czvf', backup_filename, directory])
return backup_filename
def main():
directory = '/home/kali/Documents'
backup_filename = create_backup(directory)
print(f'Utworzono kopię zapasową w pliku: {backup_filename}')
if __name__ == '__main__':
main()
Ten kod to skrypt napisany w języku Python, który tworzy kopię zapasową wybranej ścieżki na lokalnym komputerze. Skrypt najpierw importuje trzy moduły: os, datetime i subprocess. Moduł os jest wykorzystujesię do operacji na plikach i katalogach, datetime służy do generowania aktualnej daty i godziny, a subprocess pozwala na uruchomienie zewnętrznego procesu.
Główną funkcją skryptu jest create_backup, która tworzy kopię zapasową wybranej ścieżki. Funkcja przyjmuje argument directory, który określa katalog, który ma zostać skopiowany. Następnie, funkcja generuje unikalną nazwę pliku, do którego zostanie zapisana kopia zapasowa.
Nazwa pliku zawiera nazwę katalogu oraz bieżący czas. W celu utworzenia kopii zapasowej, funkcja wywołuje proces tar z użyciem modułu subprocess i przekazuje mu odpowiednie argumenty.
Funkcja main wywołuje funkcję create_backup, podając jej jako argument ścieżkę do katalogu, który ma zostać skopiowany. Następnie funkcja wyświetla nazwę pliku, do którego została zapisana kopia zapasowa.
Ostatecznie, if name = 'main’: uruchamia funkcję main, gdy skrypt jest uruchamiany bezpośrednio, a nie importowany do innego skryptu.
W ten sposób, skrypt umożliwia użytkownikowi automatyzację procesu tworzenia kopii zapasowej wybranej ścieżki w systemie Linux przy użyciu języka Python.
Tworzenie pliku z kodem:
Wprowadzenie kodu do pliku:
Uruchomienie kodu
Aby uruchomić powyższy kod należy zapisać go w pliku o rozszerzeniu .py (np. backup.py ) i uruchomić w terminalu poleceniem python backup.py . W moim przypadku używam python3.
Kod stworzył kopię katalogu /home/kali/Documents i zapisał ją w /home/kali/Documents/backups . Nazwa pliku kopii zapasowej będzie zawierała nazwę katalogu bez ścieżki, a na końcu będzie datę i czas utworzenia.
Warto pamiętać, że do wykonania kopii zapasowej niezbędne są odpowiednie uprawnienia dostępu do plików i katalogów, które chcemy skopiować. Warto upewnić się, że skrypt jest uruchamiany przez użytkownika, który ma odpowiednie uprawnienia.
Podsumowanie – Kopie zapasowe – automatyzacja procesu tworzenia
Automatyzacja za pomocą Pythona może przynieść wiele korzyści w pracy programisty lub administratora systemów. Oto kilka z nich:
- Oszczędność czasu: Automatyzacja pozwala na znaczne zmniejszenie czasu poświęcanego na ręczne wykonywanie powtarzających się zadań. Dzięki temu programista lub administrator systemów może skupić się na bardziej skomplikowanych zadaniach lub projektach.
- Łatwość w utrzymaniu: Automatyzacja umożliwia utrzymanie spójności między różnymi systemami i usługami. Dzięki temu, że zadania wykonuje się w sposób zautomatyzowany, zmiany w systemie lub usłudze można łatwo wprowadzać. I to bez konieczności modyfikowania każdego skryptu ręcznie.
- Poprawa dokładności: Ręczne wykonywanie powtarzających się zadań zwiększa ryzyko błędów ludzkich. Automatyzacja może pomóc w zmniejszeniu ryzyka popełnienia błędów i zapewnieniu większej dokładności.
- Skalowalność: Automatyzacja za pomocą Pythona umożliwia łatwe skalowanie zadań w zależności od potrzeb. Programista lub administrator systemów może skonfigurować skrypty, aby wykonywały zadania w sposób automatyczny na dużej liczbie urządzeń.
- Replikowalność: Automatyzacja za pomocą Pythona umożliwia łatwe replikowanie i udostępnianie kodu między różnymi projektami lub zespołami. Dzięki temu, że kod wykonuje się automatycznie, łatwiej jest dostarczyć go na różne środowiska.
Powyższe argumenty przemawiają za stosowaniem automatyzacji w swojej pracy, niezaleźnie czy będzie to python czy inny język programowania. Automatyzacja pozwala zaoszczędzić czas, uniknąć błędów ludzkich oraz zwiększyć efektywność w wykonywaniu codziennych zadań.
Dzięki automatyzacji można zwiększyć jakość pracy a jednocześnie zmniejszyć koszty i ryzyko popełnienia błędów.
W przypadku programistów, automatyzacja może pomóc w ulepszaniu ich kodu oraz szybszym dostarczaniu gotowych rozwiązań. W efekcie automatyzacja przyczynia się do zwiększenia produktywności i osiągania lepszych wyników w pracy.