閉じる前にスクリプトを完了するのに十分な時間をかけてください。

閉じる前にスクリプトを完了するのに十分な時間をかけてください。

私はeインク画面を備えた小さなLinuxベースのデバイスを作成しました。コンピュータがシャットダウンする前に画面を消去できる場合は、画面の寿命が延びているようです。 (EInkは電源がなくても受動的に画像を表示し続けますが、画像が常に同じであると画像が広がる可能性があります)。 30秒。

終了スクリプトを/etc/rc0.d/K01foobarに入れましたが、実行されていないようです。ログファイルに書き込むためにスクリプトの上部にいくつかのコードを追加しようとしましたが、ログファイルは記録されませんでした。スクリプトはグローバルに実行可能で、先頭に #!/bin/sh があります。

ここで何が起こっているのか知っていますか?間違ったランレベルを使用していますか?実行が完了する前にスクリプトは終了しますか?その時点では、ファイルシステムが閉じてログファイルに書き込むためにファイルシステムにアクセスできないのでしょうか。

ベストアンサー1

私が見つけたこのブログ投稿SysVとsystemdがどのように動作するかをよく比較し、ファイルシステムが読み取り専用になり、実行しようとするコマンドが潜在的に長時間かかる問題を処理する方法について説明します。次のスクリプトは、基本的に彼がsystemdに提供したスクリプトにいくつかの修正を加えたものです。

ブラウニー_shutdown.sh:

#!/bin/bash
# see https://fitzcarraldoblog.wordpress.com/2018/01/13/running-a-shell-script-at-shutdown-only-not-at-reboot-a-comparison-between-openrc-and-systemd/
REBOOT=$( systemctl list-jobs | egrep -q 'reboot.target.*start' && echo "rebooting" || echo "not_rebooting" )
if [ $REBOOT = "not_rebooting" ]; then
  /usr/bin/python /home/pi/Documents/programming/brownie/brownie_blank.py
fi

ブラウニー_オフ。サブ:

# see https://fitzcarraldoblog.wordpress.com/2018/01/13/running-a-shell-script-at-shutdown-only-not-at-reboot-a-comparison-between-openrc-and-systemd/
[Unit]
Description=Blank out the eInk screen before shutting down
DefaultDependencies=no
Before=shutdown.target halt.target
# The following is required because my scripts are in /home:
RequiresMountsFor=/home

[Service]
Type=oneshot
ExecStart=/usr/local/sbin/brownie_shutdown.sh

[Install]
WantedBy=halt.target shutdown.target

ファイル生成:

configure_shutdown:
    cp brownie_shutdown.sh /usr/local/sbin/brownie_shutdown.sh
    chmod +x /usr/local/sbin/brownie_shutdown.sh
    cp brownie_shutdown.service /etc/systemd/system/brownie_shutdown.service
    systemctl enable brownie_shutdown.service

Bashスクリプトでは、最上位コードは開始と終了を区別します。私のスクリプトは/ homeにあるので、.serviceファイルにはRequiresMountsFor = / home行があります。 ExecStart行はbashスクリプトを指します。 makefileはrootとして実行する必要があります。

ブログ記事には、これらの変更を適用するには再起動が必要であると述べていますが、実際にはシステムがシャットダウンするとすぐに機能していることがわかりました。彼は仕事に時間がかかる可能性があるという問題について話しました。しかし、彼は自分のコードのどの機能が機能するかを説明していません。

おすすめ記事