Saya ingin tahu apa perbedaan antara program yang ada; dimulai dengan systemd ketika diaktifkan melalui systemctl, vs yang dimulai dengan /etc/rc.local
atau 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-sync
untuk menjalankan skrip sebelum dan mengirim ke perangkat yang terhubung.
Yang mengejutkan saya, skrip ketika dieksekusi oleh shairport-sync
tidak kill
arecord
atauaplay
Namun, ketika saya akan menjalankan skrip melalui terminal skrip dieksekusi dan dibunuh arecord
dan aplay
.
Untuk lebih membingungkan diri saya, saya membunuh shairport-sync
dan memulainya melalui terminal untuk melihat hasil dari apa yang terjadi. Ketika saya melakukannya skrip berfungsi seperti yang saya harapkan ketika perangkat terhubung dan membunuh arecord
dan aplay
. Jadi, sebagai memperbaiki saya dinonaktifkan shairport-sync
di sysmtectl
dan mengaturnya untuk berjalan dalam /etc/rc.local
sebagai perbaikan cepat. Setelah reboot
itu berfungsi seperti yang saya harapkan.
Hal ini membuat saya percaya bahwa ada beberapa perbedaan antara program yang dijalankan sebagai bagian dari systemd
dan program yang berjalan ketika dimulai melalui /etc/rc.local
atau CLI.
Mengapa ini terjadi? Apakah ini karena level run yang berbeda? Beberapa sihir gelap?
Skrip yang dijalankan saat perangkat terhubung shairport-sync
adalah 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-sync
adalah 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/syslog
hanya ketika shairport-sync awalnya dijalankan terpisah systemd
. Kapan shairport-sync
dijalankan dari CLI atau /etc/rc.local
tidak 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-sync
awalnya dimulai, ketika perangkat terhubung atau terputus shairport-sync
terus berjalan.
/home/pi/shScripts/shairportfade.sh
?
rc.local
ps ... awk ... grep ...
hal mungkin diganti dengan sederhanapkill