私はArch Linuxのインストールを実行しており、systemdサービスが実行されています/etc/rc.local
。 macOSでrc.local
。dmesg -D
/Volumes
スクリプト内の各コマンドに対してrc.local
スクリプトが失敗したかどうかをテストし、コマンドラインに対応する数字で終了します。したがって、ファイルの断片(私の形式を記憶するように調整されています)は次のようになります。
#!/bin/bash
dmesg -D || exit 1
i=2
for name in usb sd
do
mkdir -p /mnt/${name} || exit ${i}
i=$((i+1))
done
sysctl -w kernel.kptr_restrict=2 || exit 4
exit 0
これは少し暗く、終了コードをスクリプト割り当てに制限する必要があるという印象を受けましたが、終了値が印刷されるため、rc-local.service
systemdサービスが失敗した理由を確認する方法を知る唯一の方法です。 systemd /が文字列などを渡すなど、失敗した理由に関する情報を受け取るようにsystemctl status rc-local.service
コーディングする他の方法はありますか?その後、入力すると文字列が次のように表示されることがわかります。rc.local
rc-local.service
rc.local
systemctl status rc-local.service
Error reason: Failed to set kernel.kptr_restrict
ベストアンサー1
失敗(ゼロ以外の終了コード)のため、コマンド(またはコマンドが競合する場合はシェル)はエラーを印刷する必要があります。
systemd はこれらのエラーメッセージをシステムログに記録します。利点systemctl status
は、サービスの最新のログ行を表示することです。
http://0pointer.net/blog/projects/systemctl-journal.html
systemctl status
編集:syslogはroot()として実行するか、sudo
グループのメンバーである場合にのみ読み取ることができます。adm
systemd-journal