Следующий фрагмент оболочки устанавливает все пакеты 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-крюк, но он будет запускаться после удаления пакетов, обновления и т.д., а не только после установки пакетов.
он волшебным образом снова работает
единственное, что я изменил, это
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
почему он вызвал ошибку и сценарий не работал ВСЕ? Я не знаю
и почему скрипт остановился работает в первую очередь - это неразгаданная тайна
.Проверьте, что написано в вашем файле /var/log/syslog о задаче cron. Удалите слово "cron" из журнала и проверьте, что является ошибкой. Используйте команду ниже, чтобы проверить то же самое.
grep -i cron /var/log/syslog
Иначе все, что вы упомянули, будет хорошо.
Ваш Crontab говорит, что использует Bash, но когда вы запускаете сценарий, вы на самом деле снова вырваетесь на « SH 'Shell, при этом вы теряете все ваши переменные окружающей среды. Я только что имел эту проблему на прошлой неделе. Моя проблема заключалась в том, что у меня не было переменной пути, когда скрипт пробежал в Cron, но скрипт пробежал нормально, когда я пробежал его вручную.
Вы можете проверить это, сделав это прямо в верхней части вашего сценария, после #! / Bin / Sh:
echo $PATH
echo $path
sleep 10
в вашем скрипте, когда он работает Cron. Я не могу вспомнить, какой путь используется «SH», так что эхо оба.
Может быть, не выложить «SH» в вашем скрипте?
Или для каждой утилиты вы запускаете, введите полный путь к утилиту, каждый ввод и каждый выходной файл.
Итак, если ваш сценарий говорит:
WGET ...
Вы бы заменили его полный путь:
/ usr / bin / wget ...
или как правильный путь.
(Я не могу добавить комментарии, чтобы я не смогу ответить на комментарии. Извините.)
, кажется, ошибка опечатки.
В первом сценарии вы используете / var / log
, но в новом это / var / logs
. Log - это стандартный каталог, но вы, кажется, используете журнал S