Szukaj…


Wykonaj zadanie raz w określonym czasie

Uwaga: at nie jest instalowane domyślnie w większości nowoczesnych dystrybucji.

Aby wykonać zadanie raz w innym czasie niż teraz, w tym przykładzie można użyć godziny 17:00

echo "somecommand &" | at 5pm

Jeśli chcesz złapać dane wyjściowe, możesz to zrobić w zwykły sposób:

echo "somecommand > out.txt 2>err.txt &" | at 5pm

at rozumie wiele formatów czasu, więc można też powiedzieć,

echo "somecommand &" | at now + 2 minutes
echo "somecommand &" | at 17:00
echo "somecommand &" | at 17:00 Jul 7
echo "somecommand &" | at 4pm 12.03.17

Jeśli nie podano roku ani daty, zakłada się, że następnym razem wystąpi określony czas. Więc jeśli dasz godzinę, która już minęła dzisiaj, przyjmie ona jutro, a jeśli dasz miesiąc, który już minął w tym roku, przyjmie to w przyszłym roku.

Działa to również razem z nohup, jak można się spodziewać.

echo "nohup somecommand > out.txt 2>err.txt &" | at 5pm

Istnieje kilka innych poleceń kontrolujących zadania czasowe:

  • atq wyświetla listę wszystkich zadań czasowych ( atq ueue)
  • atrm usuwa zlecenie czasowe ( atr e m ove)
  • partia działa w zasadzie tak samo jak w, ale uruchamia zadania tylko wtedy, gdy obciążenie systemu jest mniejsze niż 0,8

Wszystkie polecenia dotyczą zadań zalogowanego użytkownika. Jeśli zalogujesz się jako root, zadania systemowe są oczywiście obsługiwane.

Wykonywanie zadań w określonych momentach wielokrotnie za pomocą systemd.timer

systemd zapewnia nowoczesną implementację crona . Do wykonania skryptu okresowo potrzebna jest usługa i plik timera. Pliki usługi i timera należy umieścić w / etc / systemd / {system, użytkownik}. Plik usługi:

[Unit]
Description=my script or programm does the very best and this is the description

[Service]
# type is important!
Type=simple
# program|script to call. Always use absolute pathes 
# and redirect STDIN and STDERR as there is no terminal while being executed 
ExecStart=/absolute/path/to/someCommand >>/path/to/output 2>/path/to/STDERRoutput
#NO install section!!!! Is handled by the timer facitlities itself.
#[Install]
#WantedBy=multi-user.target

Następnie plik timera:

[Unit]
Description=my very first systemd timer
[Timer]
# Syntax for date/time specifications is  Y-m-d H:M:S 
# a * means "each", and a comma separated list of items can be given too
# *-*-* *,15,30,45:00  says every year, every month, every day, each hour,
# at minute 15,30,45 and zero seconds

OnCalendar=*-*-* *:01:00  
# this one runs each hour at one minute zero second e.g. 13:01:00 


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow