crontab, не запускающий один сценарий

Следующий фрагмент оболочки устанавливает все пакеты FOO-doc так, что FOO уже установлен:

apt-get install $(comm -12 <(dpkg --get-selections | awk '$2 == "install" {print $1 "-doc"}')
                           <(apt-cache pkgnames | sort) )

Чтобы сделать это немного чище, опустив уже установленные пакеты -doc:

installed_packages=$(dpkg --get-selections | awk '$2 == "install" {print $1}')
uninstalled_doc_packages=$(comm -13 <(printf '%s\n' $installed_packages)
                                    <(printf '%s-doc\n' $installed_packages))
missing_doc_packages=$(apt-cache pkgnames | sort |
                       comm -12 - <(printf '%s\n' $uninstalled_doc_packages))
apt-get install $missing_doc_packages

Не думаю, что есть удобный способ выполнить это автоматически после установки пакета¹ или автоматически пометить устанавливаемые пакеты -doc.

¹ Можно установить dpkg или apt-крюк, но он будет запускаться после удаления пакетов, обновления и т.д., а не только после установки пакетов.

1
17.03.2015, 11:15
4 ответа

он волшебным образом снова работает

единственное, что я изменил, это

30 7 * * *      /var/www/import/download_offers.sh > /var/logs/download_offers_cron.log
                                                             ^^ here

-

30 7 * * *      /var/www/import/download_offers.sh > /var/log/download_offers_cron.log
                                                             ^^ here

почему он вызвал ошибку и сценарий не работал ВСЕ? Я не знаю

и почему скрипт остановился работает в первую очередь - это неразгаданная тайна

.
1
27.01.2020, 23:51

Проверьте, что написано в вашем файле /var/log/syslog о задаче cron. Удалите слово "cron" из журнала и проверьте, что является ошибкой. Используйте команду ниже, чтобы проверить то же самое.

grep -i cron /var/log/syslog

Иначе все, что вы упомянули, будет хорошо.

0
27.01.2020, 23:51

Ваш Crontab говорит, что использует Bash, но когда вы запускаете сценарий, вы на самом деле снова вырваетесь на « SH 'Shell, при этом вы теряете все ваши переменные окружающей среды. Я только что имел эту проблему на прошлой неделе. Моя проблема заключалась в том, что у меня не было переменной пути, когда скрипт пробежал в Cron, но скрипт пробежал нормально, когда я пробежал его вручную.

Вы можете проверить это, сделав это прямо в верхней части вашего сценария, после #! / Bin / Sh:

echo $PATH
echo $path
sleep 10

в вашем скрипте, когда он работает Cron. Я не могу вспомнить, какой путь используется «SH», так что эхо оба.

Может быть, не выложить «SH» в вашем скрипте?

Или для каждой утилиты вы запускаете, введите полный путь к утилиту, каждый ввод и каждый выходной файл.

Итак, если ваш сценарий говорит:

WGET ...

Вы бы заменили его полный путь:

/ usr / bin / wget ...

или как правильный путь.

(Я не могу добавить комментарии, чтобы я не смогу ответить на комментарии. Извините.)

0
27.01.2020, 23:51

, кажется, ошибка опечатки.
В первом сценарии вы используете / var / log , но в новом это / var / logs . Log - это стандартный каталог, но вы, кажется, используете журнал S

0
27.01.2020, 23:51

Теги

Похожие вопросы