ich habe hier einen Cronjob, der jede stunde eine Datenbank (von forked-daapd) auslesen soll und gespielte Titel zu Last.fm hochladen soll.
der Cronjob sieht so aus (also root per crontab -e eingetragen):
Code: Alles auswählen
* 1 * * * /bin/bash /usr/local/bin/lastfmsubmit.sh
Code: Alles auswählen
#!/bin/bash
# Forked-daapd Datenbank lesen und und in ein lastfmsubmitd lesbares Format wandeln...
# config
SQLITE=/usr/bin/sqlite3
DATABASE=/var/cache/forked-daapd/songs3cp.db
LASTFILE=/var/cache/forked-daapd/lastfmsubmit.date
DBLSFILE=/var/cache/forked-daapd/lastfmsubmit.ls
/bin/cp /var/cache/forked-daapd/songs3.db /var/cache/forked-daapd/songs3cp.db
# get last database file date
if [ -e $DBLSFILE ]
then
. $DBLSFILE
else
DBLSRUN=
fi
# exit when database file unchanged
DBLSNOW=`ls -l $DATABASE`
if [ "$DBLSRUN" == "$DBLSNOW" ]
then
exit
fi
# get last run time
if [ -e $LASTFILE ]
then
. $LASTFILE
else
LASTRUN=0
fi
# log file date
echo "DBLSRUN="\"$DBLSNOW\""" > $DBLSFILE
# query database
OUTFILE=$(mktemp /tmp/mt-daapd-XXXXXXXX)
$SQLITE $DATABASE 'SELECT artist,album,title,track,song_length,time_played FROM files where time_played > '$LASTRUN' ORDER BY time_played ASC;' | /usr/bin/gawk -F '|' '{ printf "---\nartist: %s\nalbum: %s\ntitle: %s\ntrack: %s\nlength: %d\ntime: !timestamp %s\n",$1,$2,$3,$4,$5/1000,strftime("%Y-%m-%d %T",$6,1) }' > $OUTFILE
/bin/mv $OUTFILE /var/spool/lastfm
# log query date
echo "LASTRUN="`date +%s` > $LASTFILE
# make lastfmsubmitd files readable
/bin/chmod 664 /var/spool/lastfm/*
Das komische ist nun, dass das script wunderbar funktioniert, wenn ich per hand aufrufe:
Code: Alles auswählen
/bin/bash /usr/local/bin/lastfmsubmit.sh
Irgendwelche Ideen?
Grüße,
Pfannkuchen