Saya ingin tahu apa perbedaan antara program yang ada; dimulai dengan systemd ketika diaktifkan melalui systemctl, vs yang dimulai dengan /etc/rc.localatau melalui CLI.
Sebagai contoh, saya baru-baru ini menggunakan shairport-sync untuk pi raspberry. Awalnya, saya mengatur shairport-sync untuk memulai dengan cara sudo systemctl mengaktifkan shairport-sync.
Kemudian di jalan saya menggunakan fungsi di dalam shairport-syncuntuk menjalankan skrip sebelum dan mengirim ke perangkat yang terhubung.
Yang mengejutkan saya, skrip ketika dieksekusi oleh shairport-synctidak kill arecordatauaplay
Namun, ketika saya akan menjalankan skrip melalui terminal skrip dieksekusi dan dibunuh arecorddan aplay.
Untuk lebih membingungkan diri saya, saya membunuh shairport-syncdan memulainya melalui terminal untuk melihat hasil dari apa yang terjadi. Ketika saya melakukannya skrip berfungsi seperti yang saya harapkan ketika perangkat terhubung dan membunuh arecorddan aplay. Jadi, sebagai memperbaiki saya dinonaktifkan shairport-syncdi sysmtectldan mengaturnya untuk berjalan dalam /etc/rc.localsebagai perbaikan cepat. Setelah rebootitu berfungsi seperti yang saya harapkan.
Hal ini membuat saya percaya bahwa ada beberapa perbedaan antara program yang dijalankan sebagai bagian dari systemddan program yang berjalan ketika dimulai melalui /etc/rc.localatau CLI.
Mengapa ini terjadi? Apakah ini karena level run yang berbeda? Beberapa sihir gelap?
Skrip yang dijalankan saat perangkat terhubung shairport-syncadalah sebagai berikut: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
Berikut ini skrip fade: shairportfade.sh
#!/bin/sh
/usr/bin/amixer set Speaker 30-
for (( i=0; i<30; i++))
do
/usr/bin/amixer set Speaker 1+
done
exit 0
Skrip yang dijalankan saat perangkat terputus shairport-syncadalah sebagai berikut:shairportend.sh
#!/bin/sh
/usr/bin/amixer set Speaker 70%
/usr/bin/arecord -D plughw:1 -f dat | /usr/bin/aplay -D plughw:1 -f dat&
exit 0
Saya menemukan kesalahan berikut di /var/log/sysloghanya ketika shairport-sync awalnya dijalankan terpisah systemd. Kapan shairport-syncdijalankan dari CLI atau /etc/rc.localtidak ada kesalahan hadir.
Jan 24 00:38:45 raspberrypi shairport-sync[617]: sudo: no tty present and no askpass program specified
Harap dicatat, bahwa satu-satunya perbedaan adalah bagaimana shairport-syncawalnya dimulai, ketika perangkat terhubung atau terputus shairport-syncterus berjalan.
/home/pi/shScripts/shairportfade.sh?
rc.local
ps ... awk ... grep ...hal mungkin diganti dengan sederhanapkill