Вопрос или проблема
Я хотел бы, чтобы cron-задача запускалась каждый час для speedtest cli и логировала результаты в CSV файл с временем и датой (https://www.speedtest.net/apps/cli). Таким образом, я могу запустить это следующим образом:
0 * * * * speedtest -p no -f csv >> /home/almalinux/speedtest.csv
Как я могу вставить вывод команды “date” в качестве первого столбца (записи) для каждого speedtest?
Согласно ответу ниже. Рабочая команда выглядит так. И она работает из терминала:
0 * * * * (printf "%s," "$(date)"; speedtest -p no -f csv) >> /home/almalinux/speedtest.csv
Но не работает из CRON.
Самый простой способ, который я знаю, выглядит так:
0 * * * * (printf "%s," "$(date)"; speedtest -p no -f csv) >> /home/almalinux/speedtest.csv
Команда printf
будет выводить дату в виде строки, за которой следует ,
(если это ваш разделитель), и затем результат speedtest
cron
интерпретирует свои команды с помощью sh
, поэтому простой способ такой:
В crontab
0 * * * * /home/almalinux/bin/myscript
А в `$HOME/bin/myscript`:
#!/bin/bash
(printf "%s," "$(date)"; speedtest -p no -f csv) >> /home/almalinux/speedtest.csv
exit 0
Ответ или решение
Вопрос о создании cron-задачи для запуска speedtest CLI каждый час и записи результатов в CSV файл с датой и временем корректный. Давайте рассмотрим, как можно реализовать эту задачу, чтобы она работала как ожидается.
1. Создание скрипта
Для начала, вы можете создать отдельный скрипт, который будет выполнять команды. Это упростит управление вашей задачей cron и позволит избежать путаницы с интерпретаторами.
Шаги:
- Создайте файл скрипта, например,
myscript.sh
в каталоге/home/almalinux/bin/
:
nano /home/almalinux/bin/myscript.sh
- Вставьте в файл следующий код:
#!/bin/bash
# Записываем текущую дату и время в виде строки
printf "%s," "$(date)" >> /home/almalinux/speedtest.csv
# Выполняем команду speedtest и добавляем ее результат в CSV файл
speedtest -p no -f csv >> /home/almalinux/speedtest.csv
exit 0
- Дайте скрипту права на выполнение:
chmod +x /home/almalinux/bin/myscript.sh
2. Настройка cron-задачи
Теперь, когда у нас есть готовый скрипт, мы можем настроить cron-задачу для его выполнения каждый час.
- Откройте crontab для редактирования:
crontab -e
- Добавьте следующую строку, чтобы запустить ваш скрипт каждый час:
0 * * * * /home/almalinux/bin/myscript.sh
3. Проверка работы
Чтобы убедиться, что ваш скрипт работает корректно, вы можете:
- Ждать час и проверить лог файл
/home/almalinux/speedtest.csv
. - Или выполнить скрипт вручную, чтобы быстро убедиться, что он работает:
/home/almalinux/bin/myscript.sh
4. Примечания
- Убедитесь, что у вас установлен speedtest CLI и он доступен для выполнения из вашего скрипта.
- Проверьте права доступа к папке и файлу, чтобы убедиться, что cron может записывать в
speedtest.csv
. - Вы также можете добавить проверку на ошибки в скрипте для лучшего отслеживания возможных проблем.
Следуя этим инструкциям, вы сможете успешно настроить cron-задачу для регулярного мониторинга скорости интернета и сохранения этих данных в CSV файл с текущей датой и временем.