web-dev-qa-db-ja.com

systemdサービスユニットが起動時に失敗する

Ubuntu 17.04の起動時に特定のpowertopパラメーターを変更したかったため、/usr/sbin/でシェルスクリプトを作成し、実行可能にしました。

#!/bin/sh
echo 'min_power' > '/sys/class/scsi_Host/host1/link_power_management_policy';
echo 'min_power' > '/sys/class/scsi_Host/host2/link_power_management_policy';
echo 'min_power' > '/sys/class/scsi_Host/host0/link_power_management_policy';
echo 'min_power' > '/sys/class/scsi_Host/host5/link_power_management_policy';
echo 'min_power' > '/sys/class/scsi_Host/host3/link_power_management_policy';
echo 'min_power' > '/sys/class/scsi_Host/host4/link_power_management_policy';
echo '1' > '/sys/module/snd_hda_intel/parameters/power_save';
echo 'auto' > '/sys/bus/i2c/devices/i2c-0/device/power/control';
echo 'auto' > '/sys/bus/i2c/devices/i2c-1/device/power/control';
echo 'auto' > '/sys/bus/i2c/devices/i2c-2/device/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1d.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.3/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:00.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.6/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:02.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:14.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.4/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:17.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.2/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1c.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:1f.0/power/control';
echo 'auto' > '/sys/bus/pci/devices/0000:00:16.0/power/control';
ethtool -s  enp0s31f6 wol d
exit 0

次に、/etc/systemd/systemでサービスユニットを作成しました。

[Unit]
Description=PowerTOP

[Service]
ExecStart=/usr/sbin/powertop-stup.sh

[Install]
WantedBy=multi-user.target

Sudo systemctl enable powertop_start.serviceで有効にしましたが、再起動後は機能しません。

Sudo systemctl start powertop_start.serviceで起動した後にサービスを手動で開始すると、問題なく動作します。また、シェルスクリプト自体を起動しても動作しますが、ブート時に自動的に何も実行されません。

4
ilovebytes

サービスが機能しない理由はわかりませんが、ブート時に/sysを変更する標準的な方法はsysfsutilsを使用することであると考えているため、代替アプローチとして提案しています。

パッケージはデフォルトではインストールされない可能性があるため、最初に以下を実行します。

Sudo apt install sysfsutils

ファイル/etc/sysfs.confを編集します。次に例を示します。

sudoedit /etc/sysfs.conf

そして、これらの行を最後に追加します

class/scsi_Host/host1/link_power_management_policy = min_power
class/scsi_Host/host2/link_power_management_policy = min_power
class/scsi_Host/host0/link_power_management_policy = min_power
class/scsi_Host/host5/link_power_management_policy = min_power
class/scsi_Host/host3/link_power_management_policy = min_power 
class/scsi_Host/host4/link_power_management_policy = min_power
module/snd_hda_intel/parameters/power_save = 1
bus/i2c/devices/i2c-0/device/power/control = auto
bus/i2c/devices/i2c-1/device/power/control = auto
bus/i2c/devices/i2c-2/device/power/control = auto
bus/pci/devices/0000:00:1d.0/power/control = auto
bus/pci/devices/0000:00:1f.3/power/control = auto
bus/pci/devices/0000:00:00.0/power/control = auto
bus/pci/devices/0000:00:1f.6/power/control = auto
bus/pci/devices/0000:00:02.0/power/control = auto
bus/pci/devices/0000:00:14.0/power/control = auto
bus/pci/devices/0000:00:1f.4/power/control = auto
bus/pci/devices/0000:00:17.0/power/control = auto
bus/pci/devices/0000:00:1f.2/power/control = auto
bus/pci/devices/0000:00:1c.0/power/control = auto
bus/pci/devices/0000:00:1f.0/power/control = auto
bus/pci/devices/0000:00:16.0/power/control = auto

ファイルを保存して終了し、再起動します。

ethtoolコマンドは残りますが、解決策はありませんが、systemdがそのコマンドのみを詳細に実行できるかどうかを確認できます この答えはmuruによる

2
Zanna