@Bega

Не работает команда в bash скрипте, где ошибка?

Не запускается одна из команд в скрипте при постановке задачи в cron
00 09 * * * /mnt/pve/backups/sensors.sh >> /root/myscript.log 2>&1


sensors отрабатывает, hddtemp - нет

13-Oct-2021	09:00

coretemp-isa-0000
Adapter: ISA adapter
Package id 0:  +29.0В°C  (high = +84.0В°C, crit = +100.0В°C)
Core 0:        +26.0В°C  (high = +84.0В°C, crit = +100.0В°C)
Core 1:        +26.0В°C  (high = +84.0В°C, crit = +100.0В°C)
Core 2:        +23.0В°C  (high = +84.0В°C, crit = +100.0В°C)
Core 3:        +23.0В°C  (high = +84.0В°C, crit = +100.0В°C)

acpitz-acpi-0
Adapter: ACPI interface
temp1:        +27.8В°C  (crit = +119.0В°C)
temp2:        +29.8В°C  (crit = +119.0В°C)


Ошибка в root/myscript.log
/mnt/pve/backups/sensors.sh: line 9: hddtemp: command not found


Сам скрипт
#!/bin/bash

date=`date +%d-%b-%Y%t%H:%M`

echo -e "\n$date\n" >> sensors.txt

sensors >> sensors.txt

hddtemp /dev/sda >> sensors.txt
hddtemp /dev/sdb >> sensors.txt
hddtemp /dev/sdc >> sensors.txt


Вывод PATH
spoiler
root@pve:~# type sensors
sensors is /usr/bin/sensors
root@pve:~# type hddtemp
hddtemp is hashed (/usr/sbin/hddtemp)
root@pve:~# $PATH
-bash: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:
No such file or directory

При ручном запуске все работает. Что делаю не так?
  • Вопрос задан
  • 342 просмотра
Решения вопроса 1
borisdenis
@borisdenis
Ленив и вреден...
hddtemp /dev/sda >> sensors.txt
hddtemp /dev/sdb >> sensors.txt
hddtemp /dev/sdc >> sensors.txt

Используйте полные пути к файлу hddtemp.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
saboteur_kiev
@saboteur_kiev Куратор тега Linux
software engineer
Смотреть PATH нужно не из вашей сессии, а прямо из cron.
Когда юзер логинится интерактивно, выполняются его персональные профайлы - .profile, .bashrc, .login и др.

Крон же просто запускает с правами указанного юзера, не читая его профайлы.

Варианты как это чинить:
1. Использовать в скриптах полные пути к файлам
2. Задать PATH прямо в вашем скрипте
3. Задать PATH в самом кронтаб вначале, например

PATH=$PATH:/home/user/mypersonalbin/
00 09 * * * /mnt/pve/backups/sensors.sh >> /root/myscript.log 2>&1


crontab формат позволяет задавать переменные, которые будут работать для всех скриптов запускаемых из вашего кронтаба.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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