Systemd用の起動スクリプトを作成するには?

Systemd用の起動スクリプトを作成するには?

私のラップトップには2つのグラフィックカードがあります。 1つはIGP、もう1つは離散型です。

個々のグラフィックカードをオフにするシェルスクリプトを作成しました。

起動時に実行するためにこれをシステムスクリプトに変換する方法は?

答え1

これを行う方法は主に2つあります。

スクリプトを含める

スクリプトを実行する必要がある場合は、変換する必要はありません。代わりに、サービスを介してスクリプトを実行してくださいsystemd

したがって、スクリプトと.serviceファイル(ユニット構成ファイル)の2つのファイルが必要です。
スクリプトが実行可能で最初の行(シェルボーン)はい#!/bin/sh。次に、.serviceファイル/etc/systemd/system(通常のテキストファイルと呼ばれる)を作成しますvgaoff.service
たとえば、

  1. スクリプト:/usr/bin/vgaoff
  2. ユニットファイル:/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

vgaoffGPUの電源を切って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マンページ。

トラブルシューティング

答え2

systemdに開始項目を追加するのは複雑で面倒です。これをより便利にするためにツールを作成しました。サービスの追加systemdに開始項目をすばやく追加する簡単な方法を提供します。

取付ける:

pip3 install add_service

使用法:

python -m add_service [shell_file/cmd] [user (default `whoami`)]

例:

python -m add_service ssh_nat.sh  # by default user is `whoami`
python -m add_service "`which python3` -m http.server 80" root

関連情報