Crontab не соответствует всем требованиям

Распространенной ошибкой :является сравнение результатов необработанного lsofвызова с предполагаемым лимитом.

Глобальный лимит(/proc/sys/fs/file-max)вы должны посмотреть на /proc/sys/fs/file-nr; первое значение указывает, что используется, а последнее значение является пределом.

Ограничение OpenFile для каждого процесса, но оно может быть определено для пользователя; см. команду ulimit -Hnдля пользовательских ограничений и см. /etc/security/limits.confдля определений. Обычно применяется с «пользователем приложения», например :«tomcat» :устанавливает ограничение в 65000 для пользователя tomcat, который будет применяться к запущенному процессу Java.

Если вы хотите проверить ограничения, применяемые к процессу, получите его PID, а затем:

cat /proc/${PID}/limits

Если вы хотите проверить, сколько файлов открыто процессом, получите его PID, а затем:

ls -1 /proc/${PID}/fd | wc -l(примечание для ls это «минус один», не путать с «минус el»)

Если вы хотите узнать подробности с помощью lsof, но только для тех дескрипторов файлов, которые учитываются в ограничении, попробуйте эти:

lsof -p ${PID} | grep -P "^(\w+\s+){3}\d+\D+"

lsof -p ${PID} -d '^cwd,^err,^ltx,^mem,^mmap,^pd,^rtd,^txt' -a

Замечание :«файлы» — это файлы / pipe / tcp-соединения / и т. д.

Обратите внимание, что иногда вам, вероятно, потребуется root или использовать sudo, чтобы получить правильный результат для команд; без привилегий иногда вы не видите ошибку, вы просто получаете меньше результатов.

Наконец, если вы хотите знать, к каким файлам в вашей файловой системе обращается процесс,посмотри на:

lsof -p ${PID} | grep / | awk '{print $9}' | sort | uniq

0
15.04.2021, 21:54
2 ответа

проблема с записью в crontab уже указывалась , но для выполнения скрипта с ожидаемой датой и временем измените расписание заданий на:

0 13 1 4 * [ "$(date +\%u)" -eq 4 ] && /path/to/my/script.sh
2
28.04.2021, 22:52

man -s 5 crontab говорит:

Note: The day of a command's execution can be specified by two fields — day of month, and day of week. If both fields are restricted (i.e., aren't *), the command will be run when either field matches the current time.

Ваше указание дня равно 1st dayи Thursday, поэтому оно выполняется в оба (, но не дважды, если 1-е также является четвергом, как в 2021 ).

Обычная работа -состоит в том, чтобы crontab запускался 1-го числа, а сценарий проверял день недели с помощью команды dateи завершал работу досрочно, кроме четверга.

Это кажется большой проблемой для сценария, который запускается только раз в семь лет.

2
28.04.2021, 22:52

Теги

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