Я решил проблему. Проблема не в работе cron, а в коде. Когда функция запускается, она записывает ход выполнения с пользователем, который ее выполняет. Вот почему он работает идеально вручную. Когда cron делает это, пользователя нет, поэтому код завершается ошибкой.