Próbuję zrozumieć, dlaczego cron odmawia pracy z pewnym plikiem crontab. Strona podręcznika crontab mówi:
cron wymaga, aby każdy wpis w crontab kończył się znakiem nowej linii. Jeśli brakuje ostatniego wpisu w crontabie nowej linii, cron uzna crontab (przynajmniej częściowo) za uszkodzony i odmówi jego zainstalowania.
Biorąc pod uwagę następujący plik cron:
# zarządzany przez Fabric $ $ SHELL = / bin / sh $ ŚCIEŻKA = / usr / local / sbin: / usr / local / bin: / sbin: / bin: / usr / sbin: / usr / bin $ $ # mh dom mon dow polecenie użytkownika $ 17 * * * * root cd / && run-parts - raport /etc/cron.hourly$ 25 6 * * * test root -x / usr / sbin / anacron || (cd / && run-parts --report /etc/cron.daily) $ 47 6 * * 7 test root -x / usr / sbin / anacron || (cd / && run-parts --report /etc/cron.weekly) $ 52 6 1 * * test root -x / usr / sbin / anacron || (cd / && run-parts --report /etc/cron.monthly) $ $ # Monitorowanie Postgres $ * * * * * postgres cd / && /etc/cron.d/pgup.sh$ * / 5 * * * * postgres cd / && /etc/cron.d/aws-scripts-mon/mon-put-instance-data.pl - mem-avail --disk-space-util --disk-path = / mnt $ $ # Kopia zapasowa Postgres $ 00 00 * * * postgres /etc/cron.d/pgbackup.sh$
Zauważ, że znak „$” oznacza znak LF (format uniksowy vim).
Po ponownym uruchomieniu crona pojawia się następujący błąd w syslog:
31 marca 17:34:02 postgres-primary0 cron [30852]: ( system ) ERROR (Brak nowego wiersza przed EOF, ten plik crontab zostanie zignorowany)
Dodanie pustej linii na końcu pliku cron nie powoduje błędu przy ponownym uruchomieniu crona.
Wniosek:
O ile wiem, ostatni wpis kończy się znakiem nowej linii. Wygląda więc na to, że crontab go nie rozpoznaje.
Czy to błąd? Być może zamierzano, aby na końcu pliku znajdował się nowy wiersz we własnej linii, w którym to przypadku dokumentacja wprowadza w błąd. A może nie rozumiem poprawnie „nowego wiersza” w tym kontekście ... Pewne wyjaśnienie tej kwestii zostanie docenione.