Возможно, вы превышаете некоторые ограничения, установленные по умолчанию или в /etc/security/limits.conf
. Вы можете выполнить команду ulimit -a
как задание cron. Это должно отобразить ограничения, которые вы получаете в cron.
Возможно, задание по ошибке было прервано программой мониторинга простаивающего терминала или неконтролируемым убийцей процессов. Существует большое количество таких программ, большинство из которых можно запрограммировать так, чтобы игнорировать известные длительные процессы.
Изменить: значения по умолчанию имеют ограничения, которые могут быть превышены. Я получаю следующие ограничения по умолчанию:
:~$ ulimit -a | grep -v unlim
core file size (blocks, -c) 0
scheduling priority (-e) 0
pending signals (-i) 61167
max locked memory (kbytes, -l) 64
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
max user processes (-u) 61167
Из этих открытых файлов
и размер стека
- два, которые, как я ожидал, будут превышены с наибольшей вероятностью. Открытые файлы можно отслеживать, подсчитывая записи в / proc / XXX / fd, где XXX - это идентификатор процесса вашего скрипта. Я не знаю простого способа отслеживать размер стека. Запуск программы из сценария, увеличивающего предел размера стека, может помочь определить, является ли это проблемой.
Я бы также проверил все журналы, записанные примерно во время завершения программы, чтобы увидеть, есть ли что-нибудь в журнале. Если вы можете изменить программу, чтобы она была более подробной при выходе.
Если это ядро, вы должны увидеть его упоминание в dmesg. В противном случае вам придется искать что-то еще, что останавливает ваш скрипт (может быть, слишком широкий killall python
где-то еще?).