7

По какой-то причине мой crontab не запускает почасовые / еженедельные / etc-скрипты. Похоже, что run-parts не работает, и я не могу заставить его работать и на моей локальной машине. Есть ли ошибка в том, как я ее использую?

fabe@fabetop ~ $ cat /home/fabe/tmp/test.sh 
#!/bin/sh
touch /home/fabe/tmp/test_it
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------  2 fabe fabe  4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x  1 fabe fabe    39 Feb 20 15:00 test.sh
fabe@fabetop ~ $ run-parts --report /home/fabe/tmp
fabe@fabetop ~ $ ls -la /home/fabe/tmp
total 32
drwx------  2 fabe fabe  4096 Feb 20 15:00 .
drwx------ 60 fabe fabe 16384 Feb 20 15:00 ..
-rwxr-xr-x  1 fabe fabe    39 Feb 20 15:00 test.sh

2 ответа2

12

Проблема в названии вашего скрипта. Из man run-parts:

Если ни опция --lsbsysinit, ни опция --regex не заданы, то имена должны состоять исключительно из прописных и строчных букв ASCII, цифр ASCII, подчеркиваний ASCII и минус дефисов ASCII.

Другими словами, без расширения. Как ни странно, даже с параметром --lsbsysinit вы не можете указать файл, такой как foo.sh так как он не соответствует ни одному из охваченных пространств имен:

Если задана опция --lsbsysinit, то имена не должны заканчиваться на .dpkg-old или .dpkg-dist или .dpkg-new или .dpkg-tmp и должны принадлежать одному или нескольким из следующих пространств имен: LANANA назначенное пространство имен (^ [a-z0-9]+$); иерархические и зарезервированные пространства имен LSB (^ _?([а-z0-9 _]+-)+[а-z0-9]+$). и пространство имен сценария Debian cron (^ [a-zA-Z0-9 _-]+$).

Таким образом, пока foo.sh не работает, foo.s-h или foo.-sh будут работать. Я понятия не имею, почему они сделали это таким образом, но, вероятно, они следуют тем или иным стандартам.

В любом случае, у вас есть 2 варианта: либо переименовать ваши сценарии, чтобы они не имели расширения (в любом случае расширения * являются необязательными), либо вы можете вообще пропустить использование run-parts . Используйте это в вашем crontab вместо этого:

find /home/fabe/tmp/ -prune -type f -executable -exec {} \;

Команда выше найдет все исполняемые файлы в целевом каталоге и запустит их. Я думаю, что -executable является расширением GNU, но вы отметили это как Linux, поэтому я предполагаю, что у вас есть GNU find.

2

Каждый скрипт, помещенный в папку /etc/cron.hourly будет запускаться ежечасно.

Однако ваши файлы должны быть:

  • исполняемый файл,
  • соответствует пространству имен сценария Debian cron (^[a-zA-Z0-9_-]+$) .

Так, например, если у вас есть скрипт с расширением (в данном случае .sh ), он не будет работать.

Чтобы напечатать имена скриптов, которые будут запущены, попробуйте:

sudo run-parts --report --test /etc/cron.hourly

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .