GNU/Linux >> Znalost Linux >  >> Ubuntu

Cron úloha se neprovádí?

Dělal jsem práci cron, abych každých 5 minut zachránil můj svět Minecraftu z ram.
Testoval jsem skript a zdá se, že funguje.

Takto vypadá skript:

#!/bin/sh


VOLATILE="/home/jonathan/Games/Minecraft/Server/world/"
PERMANENT="/home/jonathan/Games/Minecraft/Server/world_storage/"
rsync -r -t -v "$VOLATILE" "$PERMANENT"

Potom jsem šel přidat úlohu cron, abych spouštěl skript každých 5 minut, a zdá se, že jej nespouští.

Toto je skript, který jsem použil:

*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh

Může mi prosím někdo pomoci?

Přijatá odpověď:

Neuvedli jste, jak jste svůj cronjob přidali. To je velký rozdíl:pokud jste použili crontab -e v rámci vašeho vlastního účtu jsou skripty spouštěny s vaším uživatelem (a proto má položka crontab o jedno pole méně — uživatel, který jej má spustit, jak známo). Pokud jste jednoduše zkopírovali výše uvedený fragment do /etc/cron.d , selhal by, protože jste nezadali uživatele (nebo spíše nenašel žádného uživatele s názvem „bash“). Měli byste tedy provést následující kroky:

  1. aktualizujte svou otázku o informace o tom, jak jste přidali úlohu cron
  2. zkontrolujte systémové protokoly (/var/log/syslog; mohly by poukazovat na možné chyby)
  3. přidejte nějaký výstup ladění do souboru Backup.sh skript, abyste zjistili, zda je spuštěn

Třetího bodu lze dosáhnout několika způsoby:

  • přidejte >>/tmp/testlog.log na konec vaší položky crontab (pro přesměrování výstupu do souboru, který můžete prozkoumat; navíc 2>&1 by zahrnoval výstup z chybové konzoly)
  • přidejte do samotného skriptu několik řádků, např. echo "Backup.sh started">/tmp/testlog.log

Navíc:Jak chcete, aby byl váš skript spouštěn pomocí bash , neměli byste mu říkat, aby používal /bin/sh (což by znamenalo použití dash na výchozí instalaci Ubuntu), ale spíše /bin/bash . Poté jej udělejte spustitelným a můžete dokonce vynechat „bash“ ze svého záznamu crontab.

Aktualizace:

Podle vašeho komentáře k mé odpovědi jste použili crontab -e vytvořit úlohu a podle vašich systémových protokolů se provede, ale definice je spíše

*/5 * * * * bash /home/jonathan/Games/Minecraft/Server/Backup.sh &>/dev/null

To přesměruje veškerý výstup do největšího úložiště ve vašem systému, „černé díry“:/dev/null sní všechno (ale nikdy nic nevrátí). Přesměrování STDOUT a STDERR tímto způsobem vás připraví o jakékoli chybové hlášení — takže nikdy nevíte, že k nim vůbec došlo, natož podrobnosti. Pro testování byste měli vynechat &>/dev/null část úplně. I když to funguje, měli byste pouze potlačit zbytečný výstup – jinak nikdy nevíte, kdy se něco pokazí. Takže je lepší vynechat alespoň ampersand, aby Cron mohl nahlásit jakékoli vyskytující se chyby.

Související:USB dock pro 4TB Seagate HDD funguje pouze s méně než 2,2 TB dat?

Dále:Jakmile je výstup přesměrován (jako ve vašem případě na /dev/null ), připojení dalšího přesměrování na konec nepřinese žádné výsledky, protože vše je již pryč. Musím tedy upravit výše uvedenou radu z „přidat… na konec vašeho záznamu v crontabu“ na „nahraďte to ve vašem záznamu v crontabu“ 😉


Ubuntu
  1. Můj Cron Job nefunguje

  2. Správa duplicitní úlohy Cron při spouštění skriptů

  3. Problém Crontab:Cron Job nefunguje při použití procent

  1. Nastavení úlohy Godaddy cron pro spouštění php skriptu

  2. Skript uživatelských dat (cloud-init) se na EC2 nespouští

  3. shebang nebo ne shebang

  1. Úloha Cron zkontrolovat, zda skript PHP běží, pokud ne, pak spustit?

  2. Naplánovat skript Apt-get pomocí Cronu?

  3. Otestujte týdenní úlohu cronu