Cron: Podstawy

Opublikowano: 14.12.2021 - tagi: Cron Komenda Linux Narzędzie

Czym jest Cron?

Cron to narzędzie służące do cyklicznego uruchomienia określonej akcji. Tą akcją może być dowolny skrypt napisany w Bashu, NodeJS itp.

Załóżmy, że potrzebujesz co godzinę wyczyścić dane z tabeli, w bazie danych. Mając już gotowy skrypt możesz skorzystać z Crona, żeby odpalać go, w danym przedziale czasowym.

Cron to proces działający w tle, który uruchamia określone zadania.

Składnia Crona

Zanim pokażę jak skonfigurować Crona najpierw poznajmy składnię — w jaki sposób można dodawać wpisy.

Przykład:

# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
*  *  *  *  * command to be executed

Składnia wpisu składa się z następujących składników:

  1. Minuta — Minuta, w której ma zostać uruchomione zadanie. Zakres: 0 - 59.
  2. Godzina — Godzina, w której ma zostać uruchomione zadanie. Zakres: 0-23.
  3. Dzień (miesiąca) - Dzień miesiąca, w którym ma zostać uruchomione zadanie. Zakres: 1-31
  4. Miesiąc — Miesiąc, w którym ma zostać uruchomione zadanie. Zakres: 1-12.
  5. Dzień (tygodnia) — Dzień tygodnia, w którym ma zostać uruchomione zadanie. Zakres: 0-6, gdzie niedziela to 0 lub 7. Można użyć też skrótów tekstowych dla dni: sun,mon,tue,wed,thu,fri,sat.

Spójrzmy na tę regułę:

5 * * * * script.sh

Ona sprawi, że w piątej minucie zostanie odpalony dane polecenie. Uwaga: w piątej minucie, a nie co pięć minut to jest różnica! Jak odpalić zadanie, co pięć minut napiszę za chwilę.

Operatory

Cron w swojej składni udostępnia także listę operatorów, które mogą nam się przydać:

  1. Gwiazdka: * - W taki sposób informujesz Crona, że nie chcesz określić konkretnej wartości.
  2. Przecinek: , - Użyj tego operatora kiedy chcesz określić kilka wartości. Na przykład chcesz, żeby polecenie zostało wykonane, w godzinach: 12 i 18 napisz: 12,18 w polu godzina.
  3. -: Jeśli chcesz określić zakres "od — do", użyj tego operatora. Chcesz napisać polecenie, żeby było wywoływane od poniedziałku do piątku? Napisz: 1-5 w polu dzień tygodnia.
  4. /: Tego operatora używasz kiedy chcesz powiedzieć Cronowi: "uruchom zadanie co...". Jeśli chcesz uruchomić skrypt co 4 godziny piszesz: */4, w polu godzina.

Jest jeszcze kilka innych operatorów, ale tutaj wymieniłem wg mnie najważniejsze.

Więc jak wywołać skrypt co 5 minut?

*/5 * * * * script.sh

Jak skonfigurować Crona?

Żeby dodać zadanie do cyklicznego uruchomienia, musimy najpierw dodać wpis do pliku o nazwie crontab.

Ciekawostka: mamy dwa rodzaje plików crontab: systemowy i użytkownika. Ten systemowy możemy edytować na prawach root'a, a użytkownika gdy jesteśmy na danym koncie zalogowani. Na przykład: użytkownik Gizmo nie będzie mógł edytować crontab użytkownika Sisi.

Dodanie wpisu do pliku

Żeby dodać wpis do crontab, wpisz komendę:

crontab -e

Prawdopodobnie zostaniesz zapytany jakiego edytora użyć do edycji.

Edytujesz plik zgodnie ze składnią opisaną wyżej.

Podgląd dodanych zadań

Komenda:

crontab -l

Przykłady

Kilka przykładów reguł napisanych w Cronie wraz z opisem:

  1. 15 12 * * 1 script.sh - W każdy poniedziałek o 12:15 uruchom script.sh
  2. * * * * 1,5 script.sh - Uruchamiaj script.sh w każdy poniedziałek i piątek
  3. 0 0 * * * script.sh - Uruchamiaj script.sh każdego dnia o północy: 00:00

Narzędzia

Składnia na pierwszy rzut oka może nie do końca być zrozumiała. W internecie można znaleźć wiele narzędzi, które pomogą nam w budowaniu reguł do Crona.

Jedno z nich znajdziesz pod tym linkiem.


Comics: I have idea!

Opublikowano: 13.12.2021 - tagi: Komiks Rysowanie


HTML: Audio jak odtworzyć ten sam dźwięk ponownie?

Opublikowano: 07.12.2021 - tagi: HTML Audio Dźwięk JavaScript

Ostatnio pracuję trochę z API HTML Audio i nauczyłem się prostej sztuczki.

Problem

Załóżmy, że chcemy odtwarzać jakiś dźwięk. Możemy to zrobić w łatwy sposób:

<button data-play>Play</button>
const audio = new Audio( './pew-pew.wav');
const playBtnEl = document.querySelector('[data-play]');

playBtnEl.addEventListener('click', (e) => {
	audio.play();
});

Wszystko działa poprawnie. Kiedy użytkownik kliknie przycisk, to dźwięk zostanie odtworzony. Problem będzie wtedy gdy zaczniesz szybko naciskać przycisk. Załóżmy: klikam dwa razy w przycisk. W takim przypadku chciałbym usłyszeć dwa razy ten sam dźwięk — co więcej te dźwięki mogą na siebie nachodzić. Ale w tym przypadku tak nie jest. Dźwięk nie zostanie odtworzony, dopóki ten poprzedni się nie skończy.

Rozwiązanie

Rozwiązanie tego problemu jest banalne. Po małym refaktoringu kod wygląd tak:

const getSound = () => new Audio('./pew-pew.wav');
let audio;

playBtnEl.addEventListener('click', (e) => {
	audio = getSound();
	audio.play();
});

Po prostu za każdym razem kiedy zostanie kliknięty przycisk, tworzymy nową instancję obiektu Audio. Dzięki czemu nie musimy czekać na zakończenie odtwarzania poprzedniej instancji dźwięku.


Metoda 15 minut - czyli jak pokonać prokrastynację i zacząć działać?

Opublikowano: 02.12.2021 - tagi: Produktywność Prokrastynacja Nawyk Czas

To stało się pewnego dnia. Do głowy przyszła mi myśl, że często mi się zdarza marnować czas. Złapałem się na tym, że stworzyłem zły nawyk: niemal codziennie oglądałem jakieś głupoty na YouTubie itp. Po prostu paliłem czas na coś, co nie dawało mi większej wartości.

Nie chcę być źle zrozumiany. Nie chodzi mi o to, żeby być ciągle zajętym i mieć grafik zapchany od góry do dołu. Czas na relaks także musi się znaleźć. Warto tylko zastanowić się, jakie są proporcje spędzanego czasu.

Zdarza Ci się spędzać czas przy komputerze, a jak już go wyłączysz, dochodzisz do wniosku, że to było marnotrawstwo? Że mogłeś ten czas wykorzystać lepiej?

Nie chce mi się

Jeśli odpowiedź na powyższe pytania brzmi 'tak', to nic prostszego wystarczy zająć się czymś dla Ciebie bardziej wartościowym.

Masz już pomysł, co będziesz robić więc czas na działanie! No ale... w którymś momencie dochodzisz do wniosku, że Ci się nie chce tego robić. Zamiast 15 minut pracy nad wyznaczonym celem wolisz spędzić 1 godzinę na coś, co zabierze Ci czas i energię. A na koniec jeszcze pojawi się myśl: "No nie znowu!". Dlaczego tak się dzieje?

To zjawisko zostało już nazwane. Jest to prokrastynacja. Wiesz, że powinieneś się czymś zająć, ale jednak wolisz to odkładać "na później". I to później jest ciągle odkładane... "na później".

Metoda 15 minut

Często jest też tak, że im częściej odkładamy coś na później, tym trudniej będzie nam w końcu zacząć to robić. Wpadamy w obłędne koło.

Jak poradzić sobie z tym problemem?

Najważniejsze to zacząć! Jeśli uda nam się przemóc później jest już znacznie łatwiej. Żeby zacząć działać odpowiedz sobie na pytanie: co powinienem zrobić najpierw? Chodzi naprawdę o coś małego. Tak że na samą myśl o tym małym kroku nie będziemy czuli zniechęcenia.

Wpadłem kiedyś na taki pomysł, że na wybrane zadania będę poświęcać 15 minut pracy codziennie. Ktoś powie: "Eee co ja zrobię w 15 minut? To bez sensu". Jeśli przez 7 dni poświęcisz 15 minut na zadanie, w skali tygodnia będzie to: 1 godzina i 45 minut, czyli prawie dwie godziny! Przez ten czas można zrobić naprawdę dużo na pewno więcej niż nicnierobienie i... marudzenie :)

Stosując tę metodę, nie musimy oczywiście skupiać się tylko na pracy. Chcesz nauczyć się czegoś nowego? Może zacząć tworzyć ciągle odkładany projekt? Albo po prostu coś poczytać?

Nie polegaj na motywacji. Blokowanie czasu to coś, co działa i daje szybkie efekty, w krótkim okresie czasu. Dzięki niej udało mi się zbudować wiele dobrych nawyków.

Podsumowując metoda 15 minut — jak ją nazywam — daje Ci szansę na stworzenie chęci do działania. Po kilku dniach sam zauważysz, że nie potrzebujesz motywacji, aby zacząć działać.


Podsumowanie: Listopad 2021

Opublikowano: 30.11.2021 - tagi: Blog Podsumowanie Listopad 2021

W listopadzie opublikowałem 6 wpisów:

Inne:

JavaScript:

NodeJS:

Wczoraj dodałem jeden nowy komiks: How does good habit work?

Przeczytałem pięć książek:

Przesłuchałem jeden audiobook: