Słyszałem, że crontab to dobry wybór, ale jak napisać linię i gdzie umieścić ją na serwerze?
Słyszałem, że crontab to dobry wybór, ale jak napisać linię i gdzie umieścić ją na serwerze?
Odpowiedzi:
Oto dobry tutorial na temat tego, czym jest crontab i jak go używać w systemie Ubuntu. Twoja linia crontab będzie wyglądać mniej więcej tak:
00 00 * * * ruby path/to/your/script.rb
( 00 00
wskazuje północ - 0 minut i 0 godzin - a*
s oznacza każdy dzień każdego miesiąca).
Składnia: Polecenie mm hh dd mt wd mm minuta 0-59 hh godzina 0-23 dd dzień miesiąca 1-31 miesiąc 1-12 mt wd dzień tygodnia 0-7 (niedziela = 0 lub 7) polecenie: co chcesz uruchomić wszystkie wartości liczbowe można zastąpić *, co oznacza wszystko
/etc/crontab
(w systemie Ubuntu), ale po uruchomieniu crontab -e
edytujesz crontab specyficzny dla użytkownika, który nie zezwala na tę kolumnę. IIRC Ubuntu odradza /etc/crontab
ręczne zamykanie, ponieważ może zostać nadpisane. Zobacz tutaj: stackoverflow.com/questions/8475694/ ...
sudo crotab -u root -e
ze strony podręcznika
linux$ man -S 5 crontab
cron(8) examines cron entries once every minute.
The time and date fields are:
field allowed values
----- --------------
minute 0-59
hour 0-23
day of month 1-31
month 1-12 (or names, see below)
day of week 0-7 (0 or 7 is Sun, or use names)
...
# run five minutes after midnight, every day
5 0 * * * $HOME/bin/daily.job >> $HOME/tmp/out 2>&1
...
Dobrze jest zwrócić uwagę na specjalne „pseudonimy”, których można używać (udokumentowane na stronie podręcznika), szczególnie „@reboot”, który nie ma alternatywy dla czasu i daty.
# Run once after reboot.
@reboot /usr/local/sbin/run_only_once_after_reboot.sh
Możesz również użyć tej sztuczki, aby uruchomić zadanie crona wiele razy na minutę.
# Run every minute at 0, 20, and 40 second intervals
* * * * * sleep 00; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 20; /usr/local/sbin/run_3times_per_minute.sh
* * * * * sleep 40; /usr/local/sbin/run_3times_per_minute.sh
Aby dodać zadanie cron, możesz zrobić jedną z trzech rzeczy:
dodaj polecenie do tabeli crontab użytkownika, jak pokazano powyżej (oraz z tabeli crontab, sekcja 5, strona podręcznika).
crontab -e -u <username>
crontab -e
EDITOR
zmiennej środowiskowej
env EDITOR=nano crontab -e -u <username>
export EDITOR=vim
crontab -e
chmod a+x <file>
utwórz skrypt / program jako zadanie cron i dodaj go do systemowych /etc/cron.*ly
katalogów anacron
chmod a+x /etc/cron.daily/script_runs_daily.sh
- uczyń go wykonywalnymman anacron
chmod a+x <file>
/etc/crontab
lub/etc/anacrontab
uruchamiane w określonym czasie/etc/anacrontab
programie cron.hourly w/etc/cron.d/0hourly
Lub można tworzyć tabele systemowe w /etc/cron.d
.
/etc/cron.d
nie muszą być wykonywalne.someuser
, a użycie /bin/bash
jako powłoki jest wymuszone. File: /etc/cron.d/myapp-cron
# use /bin/bash to run commands, no matter what /etc/passwd says
SHELL=/bin/bash
# Execute a nightly (11:00pm) cron job to scrub application records
00 23 * * * someuser /opt/myapp/bin/scrubrecords.php
Czasami będziesz musiał określić PATH i GEM_PATH używając crontab z rvm.
Lubię to:
# top of crontab file
PATH=/home/user_name/.rvm/gems/ruby-2.2.0/bin:/home/user_name/.rvm/gems/ruby-2.2.0@global/bin:/home/user_name/.rvm/rubies/ruby-2.2.$
GEM_PATH=/home/user_name/.rvm/gems/ruby-2.2.0:/home/user_name/.rvm/gems/ruby-2.2.0@global
# jobs
00 00 * * * ruby path/to/your/script.rb
00 */4 * * * ruby path/to/your/script2.rb
00 8,12,22 * * * ruby path/to/your/script3.rb
Krótki przewodnik po konfiguracji zadania cron
Utwórz nowy plik tekstowy, przykład: mycronjobs.txt
Dla każdego codziennego zadania (00:00, 03:45) zapisz wiersze harmonogramu w pliku mycronjobs.txt
00 00 * * * ruby path/to/your/script.rb
45 03 * * * path/to/your/script2.sh
Wyślij zadania do crona (za każdym razem, gdy to uruchomisz, cron usunie to, co zostało zapisane i zaktualizuje o nowe informacje w mycronjobs.txt )
crontab mycronjobs.txt
Dodatkowe przydatne informacje
Zobacz aktualne zadania cron
crontab -l
Usuń wszystkie zadania cron
crontab -r
Możesz uruchomić skrypt powłoki na dwa sposoby, używając zadania cron lub pisząc skrypt powłoki
Załóżmy, że nazwa twojego skryptu to „yourscript.sh”
Najpierw sprawdź uprawnienia użytkownika do skryptu. użyj poniższego polecenia, aby sprawdzić uprawnienia użytkownika do skryptu
ll script.sh
Jeśli skrypt jest w katalogu głównym, użyj poniższego polecenia
sudo crontab -e
Po drugie, jeśli skrypt przechowuje użytkownika „ubuntu”, użyj poniższego polecenia
crontab -e
Dodaj następujący wiersz do swojej tabeli crontab: -
55 23 * * * /path/to/yourscript.sh
Innym sposobem na zrobienie tego jest napisanie skryptu i uruchomienie go w tle
Oto skrypt, w którym musisz wpisać nazwę swojego skryptu (np .: - youscript.sh), który będzie uruchamiany codziennie o 23:55
#!/bin/bash
while true
do
/home/modassir/yourscript.sh
sleep 1d
done
zapisz go w pliku (nazwijmy go „every-day.sh”)
sen 1d - oznacza, że czeka jeden dzień, a następnie działa ponownie.
teraz daj uprawnienia swojemu skryptowi. użyj poniższego polecenia: -
chmod + x every-day.sh
teraz wykonaj ten skrypt powłoki w tle, używając "nohup". Spowoduje to kontynuowanie wykonywania skryptu nawet po wylogowaniu się z sesji.
użyj poniższego polecenia, aby wykonać skrypt.
nohup ./every-day.sh &
Uwaga: - aby uruchomić "yourscript.sh" codziennie o 23:55, musisz wykonać skrypt "every-day.sh" dokładnie o 23:55.