Jak skonfigurować zadanie Cron?

534

Chcę zaplanować uruchamianie zadania regularnie i słyszałem, że Cron jest na to sposób.

Jak dodać zadania Cron w Ubuntu?

Gabriel Solomon
źródło

Odpowiedzi:

655

Umieścić skrypt w jednym z tych folderów: /etc/cron.daily, /etc/cron.hourly, /etc/cron.monthlylub /etc/cron.weekly.

Jeśli to ci nie wystarczy, możesz dodać bardziej szczegółowe zadania, np. Dwa razy w miesiącu lub co 5 minut. Przejdź do terminala i wpisz:

crontab -e

Spowoduje to otwarcie twojego osobistego pliku crontab (plik konfiguracyjny crona). Pierwszy wiersz w tym pliku wyjaśnia wszystko! W każdym wierszu możesz zdefiniować jedno polecenie do uruchomienia i jego harmonogram, a format jest dość prosty, gdy się go zawiesi. Struktura jest:

minute hour day-of-month month day-of-week command

Dla wszystkich liczb, których możesz użyć, np. 5,34,55W polu minut będzie oznaczać bieg o 5, 34 i 55 po dowolnej godzinie.

Możesz także użyć interwałów. Są one zdefiniowane następująco: */20. Ten przykład oznacza co 20, więc w kolumnie minut jest to równoważne 0,20,40.

Aby uruchomić polecenie w każdy poniedziałek o 5:30 po południu:

30 17 * * 1 /path/to/command

lub co 15 minut

*/15 * * * * /path/to/command

Pamiętaj, że dzień tygodnia rozpoczyna się w przedziale od 0 do 6, gdzie 0 to niedziela.

Możesz przeczytać więcej tutaj .

LassePoulsen
źródło
7
Są one ogólnosystemowe i działają z wysokimi uprawnieniami. Nie umieszczałbym tam niczego, chyba że istnieje pilna potrzeba dostępu lub pozwolenia. Z reguły staraj się robić rzeczy bez możliwości. Dlatego bardziej podoba mi się ta odpowiedź: ubuntu.stackexchange.com/questions/2368/how-do-i-setup-cron-job/…
H Marcelo Morales
5
@Marcelo Morales, który również uruchomi podane komendy jako root! jeśli z drugiej strony nie używasz sudo, utworzysz crontab użytkownika, który zostanie uruchomiony jako użytkownik, który go utworzył!
LassePoulsen
4
* / 15 * * * * / path / to / command było dla mnie bardzo przydatne! dzięki!
Andrew Odendaal
18
Warto zauważyć, że zmiany są stosowane automatycznie, nie trzeba niczego restartować / przeładowywać.
Molomby,
6
Inną przydatną wskazówką jest to, że zamiast tego */15 * * * * /path/to/commandmożesz zrobić @reboot /path/to/command, aby wykonać coś podczas uruchamiania.
Kenneth Worden,
102

Jeśli zadanie, które chcesz uruchomić, może być uruchomione z tymi samymi uprawnieniami, co twój użytkownik, polecam użycie crontab użytkownika, który możesz edytować, uruchamiając EDITOR="gedit" crontab -e(który użyje gedit do edycji pliku crontab) lub po prostu crontab -e(który będzie używał domyślnego edytora) w terminalu.

Jeśli chcesz na przykład uruchamiać coś co 10 minut, dodajesz taką linię

*/10 * * * * /usr/bin/somedirectory/somecommand

i zapisz plik.

Możesz zobaczyć zawartość crontab użytkownika za pomocą crontab -l.

Aby dodać zadanie crona działające jako root, możesz edytować crontab roota, uruchamiając sudo crontab -e.

Najbardziej elastycznym sposobem jest użycie crontab systemowego, /etc/crontabktóry można edytować tylko z uprawnieniami roota. W tym pliku użytkownik ma wykonać każdą komendę zgodnie ze specyfikacją, aby można było uruchamiać komendy jako użytkownik root (na wypadek, gdybyś potrzebował tego poziomu uprawnień) lub jakikolwiek inny użytkownik w systemie.

Na przykład, jeśli chcesz uruchamiać coś co 10 minut jako root, możesz dodać taką linię

*/10 * * * * root /usr/bin/somedirectory/somecommand

(zauważ dodanie użytkownika do linii)

Możesz zobaczyć zawartość systemowego pliku crontab za pomocą cat /etc/crontab.

Więcej informacji: https://help.ubuntu.com/community/CronHowto

Li Lo
źródło
1
Oto słodki interaktywny manipulator cron, który da ci angielski do czasu cron crontab.guru
CTS_AE
52

Jeśli wolisz to zrobić za pomocą GUI, możesz przejść do Centrum oprogramowania i zainstalować Zaplanowane zadania (lub uruchomić sudo apt-get install gnome-schedule). Zapewni to potężny GUI do dodawania zadań CRON.

Pamiętaj, że jeśli użyjesz tej metody, zadania będą domyślnie wykonywane jako własny użytkownik, a nie jako root. Zazwyczaj jest to dobra rzecz.

Javier Rivera
źródło
3
niedostępne dla 16.04 najwyraźniej bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060
TankorSmash
@TankorSmash Możesz go pobrać tutaj
M. Becerra
Wymagania dotyczące pakietu nie mogą być spełnione w dniu 16.04
Odyseusz Ithaca
26

Polecam KDE's Scheduler ( kde-config-cron) Zainstaluj kde-config-cron . Dostęp do niego można uzyskać w Ustawieniach systemu w module Harmonogram zadań .

Zarządza Crontabs zarówno osobistymi, jak i systemowymi, a łatwość tworzenia granic czasowych bardzo mnie zaskoczyła (patrz zrzut ekranu poniżej). Myślę, że ta część jest naprawdę niedoceniana.

wprowadź opis zdjęcia tutaj

gertvdijk
źródło
11

Harmonogram zadań KDE nie będzie działał w zwykłym systemie Ubuntu. Działa tylko w systemach KDE, takich jak KUbuntu. W systemie innym niż KDE wolisz używać harmonogramu gnome

$ sudo apt-get install gnome-schedule

Aplikacja ma zaplanowane zadania w Dash.

Antonio
źródło
Nie znaleziono dla Ubuntu 16.04
SaidbakR
Proszę rzucić okiem na I can't install gnome schedule on Ubuntu 16.04@ askubuntu.com/questions/785657/… . Istnieje pakiet do pobrania @ bugs.launchpad.net/ubuntu/+source/gnome-schedule/+bug/1576060/… . Po prostu zagraj$ sudo dpkg -i gnome-schedule_2.3.0-0ubuntu16.04_amd64.deb
Antonio,
10

Chciałem ustawić zadanie Crona do uruchamiania przez skrypt bash, więc wykonanie skryptu dodałoby zadanie cron.

Zdałem sobie sprawę, że kiedy korzystasz z:

crontab -e 

Następnie tworzy plik:

/var/spool/cron/crontabs/root

Gdzie root to nazwa użytkownika uruchamiającego komendę crontab. Opierając się na tym i przynajmniej w 14.04, możemy wykonać następujące polecenia bash, aby utworzyć nowe zadanie Cron:

echo "30 17 * * 1 /path/to/command" > /var/spool/cron/crontabs/root

Musimy również ustawić poprawną własność pliku:

chown root:root /var/spool/cron/crontabs/root

I ustaw odpowiednie uprawnienia:

chmod 600 /var/spool/cron/crontabs/root

Jeśli po uruchomieniu crontab -ena liście znajdują się już zadania Cron, możesz dołączyć do listy za pomocą następującego polecenia:

echo "30 17 * * 1 /path/to/command" >> /var/spool/cron/crontabs/root
Craig van Tonder
źródło
2

Przykład uruchamiania skryptu test_cron.shprzez crona co minutę na Ubuntu 18.04 za pomocą dowiązania symbolicznego:

test_cron.sh plik:

#!/bin/bash
echo "System backuped" >> /media/myname/data/backup/backup_tmp.log

Jeśli chcesz używać zmiennych skryptu w skrypcie, tak jak $USERw ścieżkach, lepiej wpisać dokładną ścieżkę, bash nie pozna twoich zmiennych w czasie wykonywania.

myname to nazwa użytkownika (część grupy root, nie jestem pewien, czy uprawnienia roota są konieczne).

Zezwalaj użytkownikom na ustawianie zadań cron, plik zostanie utworzony w razie potrzeby:

sudo nano /etc/cron.allow

root
myname

Ścieżka do skryptu to /home/myname/shell/test_cron.sh

Zmieniłem właściciela i uczyniłem go wykonywalnym:

sudo chown myname /home/myname/shell/test_cron.sh
chmod +x /home/myname/shell/test_cron.sh

Dodałem link symboliczny:

sudo ln -s /home/myname/shell/test_cron.sh /usr/bin/test_cron

Zalogowany, gdy mynamedodałem nowe zadanie do wykonania test_cronco minutę.

crontab -e

*/1 * * * * test_cron

Aby sprawdzić, czy polecenie na liście:

crontab -l

*/1 * * * * test_cron

Aby sprawdzić wykonanie

grep -i cron /var/log/syslog

Nov 17 12:28:01 myname-ubuntu CRON[13947]: (myname) CMD (system-backup)
Alexander
źródło