1

Я пытаюсь получить использование процессора моего Raspberry Pi следующим образом:

def get_cpu_usage():
    return os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip()

При нормальном выполнении этот метод возвращает правильное использование, например, «7.2». Однако при вызове из cron возвращается пустая строка.

Мой crontab выглядит так:

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

* * * * * python /home/pi/sysinfo/dashboard.py

Что я делаю неправильно?

2 ответа2

4

Обычно, когда что-то не работает в соответствии с планом при запуске через cron, но работает нормально, когда вы пробуете это в терминале, проблемы вызваны одной из двух возможных причин:

  • Cron не имеет $ PATH (или, в более общем смысле, среды), к которой вы привыкли или ожидаете. В некоторой степени это можно решить, просто указав полный путь ко всему, задав соответствующие переменные среды внутри cron или в сценарии, который вы запускаете через cron и который может выполнить любую необходимую настройку перед выполнением настоящей команды.
  • cron не запускает команды через TTY. Многие вещи не заботятся и возвращаются к нормальному выходному формату, если они запускаются без подключенного TTY, но некоторые вещи все равно. top по умолчанию заботится и должен сказать, что это не важно. Я не знаю, выделяет ли Python os.popen() TTY, но я несколько сомневаюсь в этом.

В вашем конкретном случае вы можете обойти эту проблему, добавив параметр -b top . Как описано в справочной странице:

-b: работа в пакетном режиме

Начинает top в режиме 'Batch', что может быть полезно для отправки вывода сверху в другие программы или в файл. В этом режиме top не принимает ввод и запускается до тех пор, пока не будет установлен предел итераций, заданный параметром командной строки '-n', или пока он не будет уничтожен.

1

Возможно, вам потребуется добавить переменную PYTHONPATH в ваш файл crontab - возможно, ваш оператор import os (который, как я предполагаю, находится в верхней части вашего файла dashboard.py ) не работает. Вам нужно будет проверить точный каталог на вашем компьютере, но он должен быть примерно таким же, как /usr/local/lib/pythonX.X/ где X.X - это версия Python, которую вы используете.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .