tml3nr
Moderator
Hi anh Minh, anh Quạt và cả nhà.
Em mò việc tự động start stop service, xào chẻ cóp nhặt ra được cái script svccheck.sh này thấy chạy OK.
Kịch bản là khi startup. TC và aprenderer (AP) cùng start.
Giả dụ sau đó mình dùng AP.
Script này sẽ nhận biết AP đang được dùng vì số process tăng lên. Nó sẽ stop TC.
Sau khi hết dùng AP. Process giảm xuống.
Script này nhận biết AP đang free. Nó sẽ restart TC.
Nếu như mình dùng TC. Mọi việc sẽ ngược lại.
Em test script chạy OK. Vấn đề là phải dùng timer cho script start định kỳ sau một thời gian nào đó. Thí dụ như 30 giây.
Đây là một việc rất dở.
Vậy có cách nào làm cho script này chỉ tự động chạy khi mình dùng / ngưng dùng TC hoặc AP hay không ạ?
Cái script svccheck.sh xào chẻ của em. Mời các anh test thử và cho ý kiến thêm ạ:
svccheck.sh
Mã:#!/bin/bash if [ "$(pgrep -wc ap2renderer)" -gt 10 ]; then echo "aprenderer gt 10 - stop tidal if exist" pidof tidal_connect_application >/dev/null && sudo systemctl stop ifi-streamer-tidal-connect || echo "tidal not exist" exit fi if [ "$(pgrep -fwc tidal_connect_application)" -gt 14 ]; then echo "tidal gt 14 - stop aprenderer if exist" pidof ap2renderer >/dev/null && sudo systemctl stop aprenderer || echo "aprenderer not exist" exit fi if [ "`pidof ap2renderer`" = "" ];then sudo systemctl restart aprenderer fi if [ "`pidof tidal_connect_application`" = "" ];then sudo systemctl restart ifi-streamer-tidal-connect fi exit 0
TC và AP khi đang free:
Quá hay anh QuạtHọc từ bài của anh @tml3nr , thanks anh!
SMPD 0.96 Update #3
Các bác đam mê cải tiến SMPD có thể theo cách sau để tối ưu hệ thống tắt các service khi đang play TC.
Lệnh kiểm tra TC
Khi TC đang idle, kết quả là số 14Mã:pgrep -wc tidal_connect
Khi TC có phone kết nối, kết quả là số 16
Khi TC đang play, kết quả là số 17
Nhờ vào điều trên mình làm 2 việc:
1. Mod lại file /home/pi/misc/ympd_event.sh
Những phần mod:
#START ADDON
#STOP ADDON
#CHECK PLAY (2 vị trí)
---------
Mã:#!/bin/bash urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } parse() { echo `cat "$1" | sed -n "s/^[ \t]*$2[ \t]*[=]*[ \t]*//p" | head -n1 | sed -e "s/\"//g"` } case "$1" in r) # read conf (plain text) parse $2 $3 ;; w) # write conf tmp=$(urldecode "$3") if [[ $tmp == *=* ]];then key=`echo $tmp | cut -f1 -d'='` val=`echo $tmp | cut -f2 -d'='` else key=$tmp val="" fi if [ "$key" = "" ];then echo error elif [ "$val" = "" ];then # read parse $2 $key else # write line=`grep -nE "^\s*$key(\s|=)+" "$2" | head -n1 |sed -e 's/:.*//g'` echo $2 $key $val $line sed -i -e "$line s|\(^\s*$key\s*[\s|=|\"]\{1\}\s*\)[^\"]*\(\"*\)|\1$val\2|" "$2" sync fi ;; p) # list plugins (json) TARGET=.$2 cd /home/pi/plugins CMD="" i=0 for dir in `ls -d $TARGET/*` do CMD=$CMD'.['$i'].path="'$dir'"|' let ++i done CMD=$CMD. cat $TARGET/*/app.json|jq -s -c '.'| jq $CMD ;; isolate) systemd-run --nice=19 systemctl stop spotifyd systemd-run --nice=19 systemctl stop shairport-sync systemd-run --nice=19 systemctl stop tidal systemd-run --nice=19 systemctl stop aprenderer systemd-run --nice=19 systemctl stop minidlna #systemd-run --nice=19 systemctl stop upmpdcli sleep 0.4 ;; #STOP ADDON addon-stop) systemd-run --nice=19 systemctl stop shairport-sync systemd-run --nice=19 systemctl stop aprenderer systemd-run --nice=19 systemctl stop minidlna #systemd-run --nice=19 systemctl stop upmpdcli sleep 1 systemctl start soundcheck.service sleep 1 systemctl stop ympd systemctl stop ympd.socket systemctl stop mpd umount /var/lib/mpd/music/NAS/* sync sleep 0.4 exit ;; ###### END STOP ADDON ###### #START ADDON addon-start) sleep 2 if [ "`pgrep -wc tidal_connect`" = "16" ];then #echo "It's start addon" systemctl start ympd.socket mount -a systemctl start mpd systemctl start shairport-sync systemctl start aprenderer systemctl start minidlna fi sync sleep 0.4 exit ;; ###### END START ADDON ###### stop-avahi) #systemd-run --nice=19 systemctl stop avahi-daemon #systemd-run --nice=19 systemctl stop avahi-daemon.socket sleep 0.4 ;; pause) #CHECK PLAY if [ "`pgrep -wc tidal_connect`" = "17" ];then echo "It's play" systemd-run /home/pi/misc/ympd_event.sh addon-stop fi ###### END CHECK PLAY ###### if [ "`pidof spotifyd`" = "" ];then if [ `journalctl -u spotifyd|grep "Authenticated as" | wc -l` -gt 0 ];then systemd-run /home/pi/misc/ympd_event.sh spotifyd-start fi fi ;; spotifyd-start) sleep 2 systemctl start spotifyd ;; stop) if [ $(mpc|grep "\[playing\]"|wc -l) = 1 -o $(mpc|grep "\[paused\]"|wc -l) = 1 ];then exit fi #CHECK PLAY if [ "`pgrep -wc tidal_connect`" = "17" ];then echo "It's play" systemd-run /home/pi/misc/ympd_event.sh addon-stop fi ###### END CHECK PLAY ###### if [ "`pidof spotifyd`" = "" ];then if [ `journalctl -u spotifyd|grep "Authenticated as" | wc -l` -gt 0 ];then systemd-run /home/pi/misc/ympd_event.sh spotifyd-start fi fi ;; browse) ls /var/lib/mpd/music/RAM/* >/dev/null 2>&1 if [ $? -eq 0 ]; then mpc update RAM fi ;; dashboard) /home/pi/util-plot.sh /home/pi/util-dashboard.sh ;; esac exit
2. Tạo thêm file soundcheck (Không enable service)
Mã:sudo nano /lib/systemd/system/soundcheck.service
Mã:[Unit] Description=Sound check for Addon After=sound.target [Service] Type=simple ExecStart=/home/pi/misc/ympd_event.sh addon-start Restart=always StartLimitInterval=5 User=root Group=root [Install] WantedBy=multi-user.target
Kết quả việc này là khi bấm play TC, giao diện YMPD, MPD, AP, DLNA... sẽ tắt đi.
Khi stop TC thì những cái trên tự động bật trở lại.
Các bác test thử nhé! Hy vọng con đường này sáng sủa.
--------
Nếu không muốn chỉnh code, các bác download mấy file này, dùng WinSCP copy vào thư mục /tmp/ rồi chạy từng dòng sau:
Mã:sudo tar -xf /tmp/ympd.tgz --overwrite -C /home/pi/misc/ sudo tar -xf /tmp/configs.tgz --overwrite -C /home/pi/configs/ sudo tar -xf /tmp/soundcheck.tgz --overwrite -C /lib/systemd/system/ sudo tar -xf /tmp/service.tgz --overwrite -C /etc/systemd/system/
https://drive.google.com/drive/folders/1KSxHF75me0sdcqSSQmx32bDSpt25h4Zo?usp=sharing
Vậy là dự án hoàn thiện bộ tam sên TC - aprenderer - minidlna của em đạt tới hơn 90% rồi