GNU/Linux >> Linux の 問題 >  >> Linux

Systemdのスタートアップスクリプトを書く方法は?

ラップトップに2枚のグラフィックカードがあります。 1つはIGPで、もう1つはディスクリートです。

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

起動時に実行するためにsystemdスクリプトに変換するにはどうすればよいですか?

承認された回答:

これを行うには、主に2つのアプローチがあります。

  • スクリプトを実行する必要がある場合は、スクリプトを変換するのではなく、systemdを介してスクリプトを実行します。 サービス。

したがって、スクリプトと.serviceの2つのファイルが必要です。 ファイル(ユニット構成ファイル)。
スクリプトが実行可能であり、最初の行( shebang )が実行可能であることを確認します。 )は#!/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

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を参照してください。 マニュアルページ。

トラブルシューティング
ここから開始:
systemdの完全なログを表示する方法 サービス?
systemd サービス終了コードとステータス情報の説明


Linux
  1. LinuxでSystemdサービスを作成する方法

  2. 一連のSystemdサービスファイルのユーザーを変更するにはどうすればよいですか?

  3. ネットワークサービスでStandardioを使用して単純なスクリプトを作成するようにSystemdを構成するにはどうすればよいですか?

  1. systemd サービスの ulimit 値を設定する方法

  2. 起動時にシェルスクリプトを実行する方法

  3. systemd サービスの出力をファイルにリダイレクトする方法

  1. Linux – Fsckスクリプトの場所?

  2. systemd サービスを停止する方法

  3. systemd でのシャットダウン時に、他のすべての前にスクリプトを実行するにはどうすればよいですか?