Наиболее распространенная причина, почему сценарий работает из командной строки, но не из crontab, состоит в том, что сценарий зависит от переменной среды. Crontabs только имеют несколько наборов переменных среды: обычно только HOME
, USER
, SHELL
(набор к /bin/sh
) и PATH
(набор к системному значению по умолчанию). При необходимости в больше необходимо определить их в crontab файле или источнике ~/.profile
от команды.
Возможно, у Вас есть две версии установленного PHP, тот, который на первом месте в Вашей командной строке $PATH
и тот, который на первом месте в Вашем системном значении по умолчанию $PATH
, и системное значение по умолчанию PHP, измененный недавно. Но невозможно высказать больше, чем образованное предположение, так как Вы не говорите, какую ошибку Вы получаете.
Существует главным образом два подхода, чтобы сделать это:
systemd
сервис. Поэтому Вам нужны два файла: сценарий и .service
файл (конфигурационный файл единицы).
Удостоверьтесь, что Ваш сценарий является исполняемым файлом, и первая строка (хижина) #!/bin/sh
. Затем создайте .service
файл в /etc/systemd/system
(файл простого текста, давайте назовем его vgaoff.service
).
Например:
/usr/bin/vgaoff
/etc/systemd/system/vgaoff.service
Теперь, отредактируйте файл единицы. Его содержание зависит от того, как Ваш сценарий работает:
Если vgaoff
просто выключает gpu, например:
exec blah-blah pwrOFF etc
затем содержание vgaoff.service
должен быть:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff
[Install]
WantedBy=multi-user.target
Если vgaoff
используется, чтобы выключить GPU и также привести в действие его назад на, например:
start() {
exec blah-blah pwrOFF etc
}
stop() {
exec blah-blah pwrON etc
}
case $1 in
start|stop) "$1" ;;
esac
затем содержание vgaoff.service
должен быть:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/usr/bin/vgaoff start
ExecStop=/usr/bin/vgaoff stop
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Выключаться:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
[Install]
WantedBy=multi-user.target
Выключаться и на:
[Unit]
Description=Power-off gpu
[Service]
Type=oneshot
ExecStart=/bin/sh -c "echo OFF > /whatever/vga_pwr_gadget/switch"
ExecStop=/bin/sh -c "echo ON > /whatever/vga_pwr_gadget/switch"
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
После того как Вы сделаны с файлами, включаете сервис:
systemctl enable vgaoff.service
Это запустится автоматически на следующей начальной загрузке. Вы могли даже включить и запустить сервис сразу с
systemctl enable --now vgaoff.service
с systemd v.220
(на более старых установках необходимо будет запустить его вручную).
Для получения дополнительной информации посмотрите systemd.service
страница руководства.
Поиск и устранение неисправностей.
Запустите здесь:
Как видеть полный журнал a systemd
сервис?
systemd
сервисные коды выхода и объяснение информации о статусе
echo SOMETHING > /some/file
делает (или любая другая команда, на самом деле) должен познакомиться с основами CLI прежде, чем попытаться выполнить материал в их системах. То, что в стороне, к вашему сведению, чтение, как выключить dGPU на нескольких моделях ноутбука, посмотри, могли ли команды, используемые там, быть заменены чем-то как Вы, предлагают. Кроме того, для восстановления исходного файла, Вы обычно переустанавливаете пакет, который владеет им. – don_crissti 15.05.2013, 02:56