LINUX.ORG.RU

не выполняется комманда через systemd

 


0

1

Странность следующая:
если от root сделать
echo 1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable
то значение записывается, результат предсказуем.

Если собрать юнит, не важно к какому таргету прицепить. Можно даже выполнить его руками.

[Unit]
Description=Initialize pwm_enable
After=sleep.target

[Service]
Type=oneshot
RemainAfterExit=yes
User=root
ExecStart=/usr/bin/echo 1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable

[Install]
WantedBy=sleep.target


Юнит типа выполняется, но значение не перезаписывается.

systemctl status gpupwm-enable.service
● gpupwm-enable.service - Initialize pwm_enable
Loaded: loaded (/lib/systemd/system/gpupwm-enable.service; enabled; vendor preset: enabled)
Active: active (exited) since Sat 2020-12-19 18:11:01 MSK; 16s ago
Process: 2951 ExecStart=/usr/bin/echo 1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable (code=exited, status=0/SUCCESS)
Main PID: 2951 (code=exited, status=0/SUCCESS)

дек 19 18:11:01 pc systemd[1]: Starting Initialize pwm_enable...
дек 19 18:11:01 pc echo[2951]: 1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable
дек 19 18:11:01 pc systemd[1]: Started Initialize pwm_enable.


В логах ничего не появляется.

Почему так может быть и что с этим можно сделать????

Вообще решаю вопрос что при выходе из спящего режима не управляется вентилятор на видяхе, работает громко.

★★
Ответ на: комментарий от red_rain

Да блин, ну это же кастыль для тех, кто от этого отвыкнуть не смог.

rumgot ★★★★★
()

Помести свою команду из ExecStart в отдельный скрипт и вызывай его.

rumgot ★★★★★
()

для systemd то что написано в ExecStart - это просто вызов исполняемого файла с параметрами, никакие операторы из шелл-скриптов там не работают.

Чтобы перенаправить вывод в файл, надо либо явно завернуть команду в sh -c, либо оставить echo 1 в ExecStart и дописать

StandardOutput=file:/sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable

в юните

Lrrr ★★★★★
()

Всё правильно написали выше. systemd — это не шелл, операторы оболочки (такие, как перенаправления) в ExecStart= не интерпретируются и не выполняются.

Самое простое решение в твоём случае:

ExecStart=/bin/sh -c "echo 1 > /sys/class/drm/card0/device/hwmon/hwmon0/pwm1_enable"
intelfx ★★★★★
()

системд шляпа - нихрена предсказуемости нету…

anonymous
()
Ответ на: комментарий от red_rain

спасибо, путь очевидный, надо было самом сообразить.

griz ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.