Запускаем cron для работы с докером

Cerrar.

En j=$j + 200, debe invocar explícitamente la expansión aritmética, es decir, j=$(( j + 200 )).

Y en sed -n '$i,$j p' big_file.txt > $ito$j.txt, 1 )necesita usar comillas dobles -en lugar de comillas simples en el argumento de sed, ya que de lo contrario $se toma literalmente y las variables no se expandirán ; 2 )necesita llaves alrededor de i, ya que $itosería una expansión variable válida.

Además, en contextos aritméticos no necesita (y probablemente no debería )usar $delante del nombre de la variable.

Entonces, lo reescribiría como:

j=0
for (( i = 1 ; i <= 3801 ; i = i + 200)); do
    j=$((j + 200))
    sed -n "$i,$j p" big_file.txt > "${i}to$j.txt"
done

Como otros han comentado, probablemente haya una mejor manera de hacerlo, ya que ahora recorre el archivo completo una vez por cada pieza en la que se divide.

8
06.07.2018, 11:14
1 ответ

Я установил rsyslog, чтобы посмотреть, какие ошибки я получаю. Я получил следующее

(*system*) NUMBER OF HARD LINKS > 1 (/etc/crontab). Небольшой поиск показал мне, что cronимеет политику безопасности, которая не работает, если есть много жестких -ссылок на его файлы. К сожалению, многоуровневая файловая система Docker -приводит к тому, что файлы содержат множество жестких -ссылок.

Чтобы исправить это, я добавил touch /etc/crontab /etc/cron.*/*в сценарий запуска перед запуском cron. Этот дис -прикрепляется из других файлов -.

Новая точка входа:

#!/bin/sh

#fix link-count, as cron is being a pain, and docker is making hardlink count >0 (very high)
touch /etc/crontab /etc/cron.*/*

service cron start

# Hand off to the CMD
exec "$@"

Я проверил, работает

Резюме

Чтобы заставить cronработать, вам придется.

  • Установить cron— если не установлено
  • Добавить задание cron в/etc/cron.daily/(или еженедельно ). Убедитесь, что имя вашего скрипта -содержит только буквы, цифры, дефисы, без точек . (Не спрашивать )см. Задание cron не запускается из cron.daily
  • Уменьшите количество жестких ссылок cronфайлов конфигурации s до одного :do touch /etc/crontab /etc/cron.*/*— (, если в докере ). Я поместил его в скрипт start -up.
  • Пускcron:service cron start— (Если на базовой ОС, без инициализации. Как и во многих базовых образах для использования в докере ). Я поместил его в сценарий запуска -.

Сценарий точки входа из этого ответа и все остальное из вопроса сделает это. Текущий проект можно получить с помощьюhg clone ssh://hg@bitbucket.org/davids_dad/a_website

16
27.01.2020, 20:11

Теги

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