1
systemdと端末起動プログラムの違い
この違いがプログラム間で何であるかについて私は興味があります。systemctlで有効にしたときにsystemdで起動した場合と/etc/rc.local、CLI で起動した場合やCLI で起動した場合。 たとえば、私は最近、ラズベリーパイにshairport-syncを使用していました。最初に、sudo systemctl enabled shairport-syncを使用してshairport-syncを開始するように設定しました。 後で、内部の機能を使用して、shairport-sync接続するデバイスにスクリプトを実行したりポストしたりしました。 驚いたことに、スクリプトが実行されshairport-syncたときkill arecord、aplay しかし、私はスクリプトが実行され、殺された端子を介してスクリプトを実行しますarecordとaplay。 さらに混乱させるために、私shairport-syncはそれを強制終了し、ターミナルを介して起動して、何が起こっているかの出力を確認しました。私はそのようにしたときのスクリプトは、デバイスが接続されて殺されたときに、私は期待通りに機能arecordしてaplay。だから、修正として私は無効shairport-syncにsysmtectlしてで実行するように設定する/etc/rc.localクイックフィックスとして。その後、reboot期待通りに機能しました。 これにより、の一部として実行されるsystemdプログラムと、/etc/rc.localまたはCLIを介して開始されたときに実行されるプログラムには、いくつかの違いがあると私は思います。 なぜこれが起こるのですか?これは、実行レベルが異なるためですか?ダークマジック? デバイスが接続するときに実行されるスクリプトはshairport-sync次のとおりです。shairportstart.sh #!/bin/sh /usr/bin/sudo /bin/pkill arecord if [ $(date +%H) -ge "18" -o $(date +%H) -le "7" ]; then /usr/bin/amixer set Speaker 40% else /usr/bin/amixer set Speaker 100% fi /home/pi/shScripts/shairportfade.sh& exit 0 フェードスクリプトは次のとおりです。 shairportfade.sh #!/bin/sh /usr/bin/amixer set …