Mam taki log:
Plik sms2email.processed też się nie pojawia, nie wiem czy czasem skrypt nie ma błędu... Niby AI mówi, że są błędy w skrypcie...
root@OpenWrt:~/scripts# bash -x sms2email2.sh
+ MODEM_DEV=/dev/ttyACM0
+ FILE_PROCESSED=/root/scripts/sms2email.processed
+ EMAIL_RECIPIENT=test@test.pl
+ SMS_LIMIT=20
+ LOCK_FILE=/var/lock/sms2email.lock
+ exec
+ flock -n 200
+ trap 'flock -u 200; rm -f '\''/var/lock/sms2email.lock'\''' EXIT
+ log 'Script started'
+ msg='Script started'
+ echo 'Script started'
Script started
+ logger -p info -t sms2email.sh 'Script started'
+ sms_tool -d /dev/ttyACM0 recv
+ current_msg=
+ sender=
+ msg_index=
+ msg_found=0
+ counter=0
+ sms_list=
+ sms_tool -d /dev/ttyACM0 recv
+ IFS=
+ read -r line
+ + grep -q '^MSG:'
echo 'MSG: 1'
+ '[' 0 -eq 1 ']'
++ ++ echo 'MSG: 1'
cut '-d ' -f2
+ msg_index=1
+ current_msg='MSG: 1'
+ msg_found=1
+ IFS=
+ read -r line
+ + echo 'From: 48111222333'
grep -q '^MSG:'
+ + grep -q '^From:'
echo 'From: 48111222333'
++ ++ echo 'From: 48111222333'
cut '-d ' -f2-
+ sender=48111222333
+ current_msg=$'MSG: 1\n\nFrom: 48111222333'
+ IFS=
+ read -r line
+ + echo 'Date/Time: 07/30/26 15:40:07'
grep -q '^MSG:'
+ + grep -q '^From:'
echo 'Date/Time: 07/30/26 15:40:07'
+ + echo 'Date/Time: 07/30/26 15:40:07'
grep -q '^Date/Time:'
+ current_msg=$'MSG: 1\n\nFrom: 48111222333\nDate/Time: 07/30/26 15:40:07'
+ IFS=
+ read -r line
+ + echo 'Część to ja.'
grep -q '^MSG:'
+ + grep -q '^From:'
echo 'Część to ja.'
+ echo 'Część to ja.'
+ grep -q '^Date/Time:'
+ '[' 1 -eq 1 ']'
+ '[' -n 'Część to ja.' ']'
+ current_msg=$'MSG: 1\n\nFrom: 48111222333\nDate/Time: 07/30/26 15:40:07\nCzęść to ja.'
+ IFS=
+ read -r line
+ + echo ''
grep -q '^MSG:'
+ + grep -q '^From:'
echo ''
+ + grep -q '^Date/Time:'
echo ''
+ '[' 1 -eq 1 ']'
+ '[' -n '' ']'
+ IFS=
+ read -r line
+ '[' 0 -eq 1 ']'
+ '[' 0 -gt 20 ']'
+ log 'sms2email finished'
+ msg='sms2email finished'
+ echo 'sms2email finished'
sms2email finished
+ logger -p info -t sms2email.sh 'sms2email finished'
+ flock -u 200
+ rm -f /var/lock/sms2email.lock
Jakby ktoś potrzebował poprawiona wersja
#!/bin/sh
MODEM_DEV='/dev/ttyACM0' # Tu właściwy modem
FILE_PROCESSED='/root/scripts/sms2email.processed'
EMAIL_RECIPIENT='test@test.pl' # Tu swój email
SMS_LIMIT=20
LOCK_FILE='/var/lock/sms2email.lock'
log(){
msg="$1"
echo "$(date '+%Y-%m-%d %H:%M:%S') - ${msg}"
logger -p "info" -t "sms2email.sh" "${msg}"
}
log_error(){
msg="$1"
echo "$(date '+%Y-%m-%d %H:%M:%S') - ERROR: ${msg}" >&2
logger -p "err" -t "sms2email.sh" "${msg}"
}
# DISABLE CONCURRENT
exec 200>"${LOCK_FILE}"
flock -n 200 || { log "Already running" >&2; exit 1; }
trap "flock -u 200; rm -f '${LOCK_FILE}'" EXIT
log "Script started"
# Sprawdź modem
if ! sms_tool -d "${MODEM_DEV}" recv > /dev/null 2>&1; then
log_error "No response from modem at ${MODEM_DEV}"
exit 1
fi
# Utwórz plik .processed jeśli nie istnieje
if [ ! -f "${FILE_PROCESSED}" ]; then
touch "${FILE_PROCESSED}"
log "Utworzono plik ${FILE_PROCESSED}"
fi
# Zmienne
sent_count=0
processed_count=0
# Zapisz wszystkie SMS-y do tymczasowego pliku
TMP_SMS="/tmp/sms_list.$$"
sms_tool -d "${MODEM_DEV}" recv > "${TMP_SMS}"
# Przetwarzaj SMS-y z pliku tymczasowego
while IFS= read -r line; do
if echo "$line" | grep -q "^MSG:"; then
# Jeśli mamy już zgromadzoną wiadomość, wyślij ją
if [ -n "$current_msg" ] && [ -n "$sender" ] && [ -n "$msg_index" ]; then
# Sprawdź czy już był przetworzony
if grep -q "^${msg_index}\$" "${FILE_PROCESSED}" 2>/dev/null; then
log "SMS nr ${msg_index} już był przetworzony - pomijam"
else
# Wyślij email
log "Wysyłam SMS nr ${msg_index} od ${sender}"
echo "${current_msg}" | mutt -s "SMS od: ${sender}" -- "${EMAIL_RECIPIENT}"
if [ $? -eq 0 ]; then
log "SUKCES: SMS nr ${msg_index} wysłany na ${EMAIL_RECIPIENT}"
echo "${msg_index}" >> "${FILE_PROCESSED}"
sent_count=$((sent_count + 1))
# USUŃ SMS Z MODEMU (opcjonalnie - odkomentuj jeśli chcesz)
# sms_tool -d "${MODEM_DEV}" delete "${msg_index}"
# log "SMS nr ${msg_index} usunięty z modemu"
else
log_error "FAIL: Nie udało się wysłać SMS nr ${msg_index}"
fi
fi
processed_count=$((processed_count + 1))
# Resetuj zmienne dla następnej wiadomości
current_msg=""
sender=""
msg_index=""
fi
# Rozpocznij nową wiadomość
msg_index=$(echo "$line" | cut -d' ' -f2)
current_msg="$line"
sender=""
elif echo "$line" | grep -q "^From:"; then
sender=$(echo "$line" | cut -d' ' -f2-)
current_msg="${current_msg}
${line}"
elif echo "$line" | grep -q "^Date/Time:"; then
current_msg="${current_msg}
${line}"
elif [ -n "$line" ] && [ -n "$current_msg" ]; then
# To jest treść SMS-a
current_msg="${current_msg}
${line}"
fi
done < "${TMP_SMS}"
# Wyślij ostatnią wiadomość jeśli istnieje
if [ -n "$current_msg" ] && [ -n "$sender" ] && [ -n "$msg_index" ]; then
if grep -q "^${msg_index}\$" "${FILE_PROCESSED}" 2>/dev/null; then
log "SMS nr ${msg_index} już był przetworzony - pomijam"
else
log "Wysyłam ostatni SMS nr ${msg_index} od ${sender}"
echo "${current_msg}" | mutt -s "SMS od: ${sender}" -- "${EMAIL_RECIPIENT}"
if [ $? -eq 0 ]; then
log "SUKCES: Ostatni SMS nr ${msg_index} wysłany na ${EMAIL_RECIPIENT}"
echo "${msg_index}" >> "${FILE_PROCESSED}"
sent_count=$((sent_count + 1))
# USUŃ SMS Z MODEMU (opcjonalnie - odkomentuj jeśli chcesz)
# sms_tool -d "${MODEM_DEV}" delete "${msg_index}"
# log "SMS nr ${msg_index} usunięty z modemu"
else
log_error "FAIL: Nie udało się wysłać ostatniego SMS nr ${msg_index}"
fi
fi
processed_count=$((processed_count + 1))
fi
# Usuń plik tymczasowy
rm -f "${TMP_SMS}"
log "========== PODSUMOWANIE =========="
log "Przetworzono: ${processed_count} SMS-ów"
log "Wysłano: ${sent_count} nowych SMS-ów"
log "sms2email finished"