zshスクリプトを実行しているこのサービスをどこにインストールできるかを知りたいです。できるだけ早くスクリプトを実行してください。。
スクリプトは/dev/ttyS5のシリアルポートとgpioピンを使用します。
multi-user.target
zshスクリプトを引き続き実行できるよりも古いターゲットはありますか?
[Unit]
Description=Acer projector control
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/bin/zsh /usr/local/bin/ff.zsh -a acer
ExecStop=/usr/bin/zsh /usr/local/bin/ff.zsh -rb acer
RemainAfterExit=yes
Restart=on-failure
RestartSec=10s
TimeoutSec=5min
[Install]
WantedBy=multi-user.target
アップデート 2.
[Unit]
Description=Acer projector control
DefaultDependencies=no
After=local-fs.target
After=systemd-modules-load.service
Before=sysinit.target
ConditionPathExists=/dev/ttyS5
Before=shutdown.target
Conflicts=shutdown.target
[Service]
Type=simple
RemainAfterExit=yes
ExecStart=/usr/bin/zsh /usr/local/bin/ff.zsh -a acer
ExecStop=/usr/bin/zsh /usr/local/bin/ff.zsh -rb acer
Restart=on-failure
RestartSec=30s
TimeoutSec=5min
[Install]
WantedBy=sysinit.target
答え1
これを考慮すると、ベースブートプロセスの全体的な構造を説明するの図を参照する必要がありますman 7 bootup
。systemd
を指定できますが、次のセクションで何かを指定する必要がWantedBy=sysinit.target
あります。[Unit]
[Unit]
DefaultDependencies=no
After=local-fs.target
After=systemd-modules-load.service
Before=sysinit.target
たぶんあるかもしれません
ConditionPathExists=/dev/ttyS5
DefaultDependencies
これを設定すると、no
サービスは開始プロセスの最初に実行される可能性がありますが、サービス要件についてより明示的に指定する必要があります。
スクリプトは/usr/local
別のファイルシステムに配置されているため、スクリプトを実行する前にファイルシステムがマウントされていることを確認する必要があります。これはによって達成することができますAfter=local-fs.target
。
/dev/ttyS5
また、スクリプトが積極的にロードされない限り、カーネルモジュールとGPIOがロードされていることを確認する必要があります。これを達成するために、適切なモジュールを指定するためにファイルをAfter=systemd-modules-load.service
使用したとします。/etc/modules-load.d/*.conf
を実行し、systemctl list-units *.device
そのデバイスおよび/またはGPIO(存在する場合)に対応するデバイスを見つけて、.device
それを実行するようにサービスを設定することもできます。ttyS5
After=
スクリプトが正常に動作するか動作するには早すぎると判断した場合は、代わりにBefore=sysinit.target
試してみてください。zsh
WantedBy=basic.target
Before=basic.target
あるいは、「Between local-fs.target
and」が十分に達していない場合は、スクリプトと必要なものすべてをinitramfsにパッケージ化するためにフックスクリプト(挿入)をsysinit.target
作成し、現在のスクリプトを1つに変更する必要があります。initramfs-tools
/etc/initramfs-tools/hooks
update-initramfs
initramfs-tools 起動スクリプト/etc/initramfs-tools/scripts/*/
(ディレクトリの1つに入れてください)。
しかし、私はzsh
シェルとその要件でinitramfsを膨らませることをお勧めします。 initramfsパスに行きたい場合は、/bin/dash
まず(軽量POSIXシェル)を使用して起動時間スクリプトを実行可能にする必要があります。これが存在する基本シェルだからです。現代 Debian で/Ubuntu の initramfs から。
フックスクリプトとブートストラップスクリプトの両方に従う必要がある特定の要件があります。man 7 initramfs-tools
2種類のスクリプトの例があります。
また、initramfs中にすべてのデバイスがまだ初期化されていない可能性があるという事実も処理する必要があります。udev
カーネルモジュールのロード中にデバイスを作成するのは忙しいでしょう。フックスクリプトはドライバ/dev/ttyS5
とGPIOがinitramfsに含まれていることを確認し、起動スクリプトはそれらを明示的にロードするか、デバイスを使用する前に自動的にロードされていることを確認する必要があります。