Skummt shellscript & crontab

C, C++, Pascal, Assembly, Raspberry, Java, Matlab, Python, BASIC, SQL, PHP, etc.
Användarvisningsbild
Oltronix
Inlägg: 458
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Skummt shellscript & crontab

Inlägg av Oltronix »

Jag har ett shellscript som körs i bash som innehåller följande rad:

Kod: Markera allt

echo $T12 > T12.data
När jag manuellt kör scriptet är allt ok T12.data har ett värde, men i crontab finns följande:

Kod: Markera allt

* * * * * /home/pi/datalogger/read_1wire.sh &> /dev/null
när detta körts så är filen tom, nästa h00 och h0a finns i filen så riktigt tom är den inte.
Jag har sökt om det är något annan script som uppdaterar T12.data genom

Kod: Markera allt

grep T12.data *.sh
men inga andra filer acessar filen.

Vad göra?
Vad kan felet vara?
Användarvisningsbild
jihe
Inlägg: 2685
Blev medlem: 24 april 2009, 20:16:03

Re: Skummt shellscript & crontab

Inlägg av jihe »

Kör du cd till rätt plats i skriptet?
Nerre
Inlägg: 27164
Blev medlem: 19 maj 2008, 07:51:04
Ort: Upplands väsby

Re: Skummt shellscript & crontab

Inlägg av Nerre »

Alltid komplett sökväg till allt i script som ska köras av nåt program.

Kan också vara så att crontab inte har skrivrättigheter till filen? Det är lite olika i olika distar vilken användare crontab körs som tror jag.
hawkan
Inlägg: 3381
Blev medlem: 14 augusti 2011, 10:27:40

Re: Skummt shellscript & crontab

Inlägg av hawkan »

Tycker det är bra när man bara får en pytteliten snutt av shell-scriptet så man inte förvillas av annat som kan påverka.
Användarvisningsbild
Oltronix
Inlägg: 458
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: Skummt shellscript & crontab

Inlägg av Oltronix »

jihe skrev: 3 oktober 2024, 16:00:18 Kör du cd till rätt plats i skriptet?
ja det gör jag och noterade att crontab kör från homedirectoryt /home/pi men jag sätter om till rätt dir. Kollat att det blir rätt
Användarvisningsbild
ecenier
Inlägg: 1149
Blev medlem: 13 december 2007, 17:51:42
Ort: Älvsjö
Kontakt:

Re: Skummt shellscript & crontab

Inlägg av ecenier »

Miljövariabler för användaren pi är nödvändigtvis inte tillgängliga för root som är den som kör cron (som det ser ut från det lilla du visar).

Du kan prova med att i crontab i stället köra scriptet som användaren pi genom att lägga till sudo -u pi <script> &> /dev/null

* * * * * sudo -u pi /home/pi/datalogger/read_1wire.sh &> /dev/null
Användarvisningsbild
Oltronix
Inlägg: 458
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: Skummt shellscript & crontab

Inlägg av Oltronix »

hawkan skrev: 3 oktober 2024, 16:28:59 Tycker det är bra när man bara får en pytteliten snutt av shell-scriptet så man inte förvillas av annat som kan påverka.
Jag kanske skulle gett er alla filerna och hela filer (mycket debugkraffs i dom). Tyckte att det hade blivit väl grötig för er. Men tack vare frågan om cd så löste det sig. Jag acessade en fil innan jag hade satt rätt cd och då fanns den inte förståss.

Kod: Markera allt

homedir=/home/pi/datalogger             #06-09
cd $homedir
source givare.sh
De två sista raderna hade ombytt ordning tidigare. Hur som helst. Tack för support. Det fungerar alltid bättre när man har någon att prata med. Jag har jagat denna bug i ett antal timmar innan. Nu fixade sig på ett fåtal minuter. Jag får buga mig ödmjukt.
Användarvisningsbild
Oltronix
Inlägg: 458
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: Skummt shellscript & crontab

Inlägg av Oltronix »

ecenier skrev: 3 oktober 2024, 20:51:58 Miljövariabler för användaren pi är nödvändigtvis inte tillgängliga för root som är den som kör cron (som det ser ut från det lilla du visar).

Du kan prova med att i crontab i stället köra scriptet som användaren pi genom att lägga till sudo -u pi <script> &> /dev/null

* * * * * sudo -u pi /home/pi/datalogger/read_1wire.sh &> /dev/null
Mm jag tänkte på detta. Jag testade med skriva svaret från "whoami" i scriptet till en logfil. Och svaret var "pi". Jag var nöjd med detta och tyckte att det räckte med det. Testade även med "env". Där blev det många parametrar. Skulle förståss testat med en logfil i crontab och inte /dev/null
Användarvisningsbild
MiaM
Inlägg: 12620
Blev medlem: 6 maj 2009, 22:19:19

Re: Skummt shellscript & crontab

Inlägg av MiaM »

Linux har väl aldrig gjort detta, men unixar förr hade ofta sh som root-shell men csh som user-shell.

Håller annars med om att det sannolikt är en rättighetsgrej. "Sudo användaren-som-cron-är -" och prova att köra scriptet igen
Användarvisningsbild
Oltronix
Inlägg: 458
Blev medlem: 10 december 2011, 21:24:38
Ort: Nynäs

Re: Skummt shellscript & crontab

Inlägg av Oltronix »

hawkan skrev: 3 oktober 2024, 16:28:59 Tycker det är bra när man bara får en pytteliten snutt av shell-scriptet så man inte förvillas av annat som kan påverka.
Ja du har rätt. jag skickade för lite info. Det är en svår avvägning vad man skall skicka med och samtidigt vara tydlig. Jag önskar en del av er tid för att hjälpa mig då kan jag inte bara dränka er med info. Fast på en kodreview skall allt vara med inklusive parameterfiler, annan setup, resultat från testkörningar mm. Sen skäms jag förståss jag lite. Det jag gjort är ett hack som har ändrats med tiden. Olika datastrukturer från tid till annan. Inte stuktuerat eller vackert.

Jag har tänkt skriva om hela baletten i python med fick inte till rrdtool o python tillsammans.
Jag skickar med några filer som visar på rörigheten och visar problemet med rätt fokus.
Först crontab:

Kod: Markera allt

 m h  dom mon dow   command
@reboot /home/pi/datalogger/start_owfs.sh & > /dev/null
@reboot nohup /usr/bin/python3 /home/pi/Server/web_server.py & > /dev/null
@reboot sudo telldusd > /dev/null
#@reboot nohup /home/pi/datalogger/ESIC-test.sh & 1>/dev/null
#nohup python3 bme280_test.py & > /dev/null
*/5 * * * * /home/pi/datalogger/update_temp_db.sh &> /dev/null
*/3 * * * * /home/pi/datalogger/rrd-xport.sh &> /dev/null
* * * * * /home/pi/datalogger/read_1wire.sh &> /dev/null
#*/4 * * * * /home/pi/datalogger/ESIC.sh &> /dev/null
#*/4 * * * * /home/pi/datalogger/ESIC-test.sh &> /dev/null
* * * * * /home/pi/datalogger/update_temp_db6.sh &> /dev/null
* * * * * /home/pi/datalogger/update_temp_db71.sh &> /dev/null
*/10 * * * * /home/pi/datalogger/graph.sh &> /dev/null
*/10 * * * * timeout 8m /home/pi/datalogger/send-to-one.sh &> /dev/null

Kod: Markera allt

pi@mumin3:~/datalogger $ cat givare.sh 
#!/bin/bash
#2024-09-10,
echo 'Vilka givare finns:'
echo 'termometrar: 10.xx'
ls /mnt/1wire| grep "10\."
echo 'Andra: tex 20.xx'
ls /mnt/1wire| grep "20\."
echo "Alla:"
ls /mnt/1wire | grep "\." 
echo 

t1=10.B69418000000
t2=10.2F492F000800
t3=10.170908000800
t4=10.40B20C000800
t5=10.2D412F000800
t6=10.6DAAC7000800
t7=10.354D2F000800
t8=10.ED432F000800
t9=10.D2532F000800
t10=10.44432F000800
t11=10.23512F000800
U1=20.B10310000000
U2=20.691A0B000000
#from read_1wire.sh
t12=30.5F7AB5120000
v12=20.B10310000000
v13=20.691A0B000000

#bme280
#bme680

Kod: Markera allt

i@mumin3:~/datalogger $ cat read_1wire.sh 
#!/bin/bash
#-----------------------------------------------------------
#2024-10-03, 2022-12-10, 2021-01-13, 2020-06-09 2019-06-13 ESIC.sh added
#2015-05-13,2014-10-09, 2014-10-05, 2014-01-03
#Read all 1-wire sensors and save data in "output_file"
#input:  /mnt/1wire/*, ESIC-temp and more
#output: giv*, temp*, hum*, T*.data, V*.data, $output_file and more
#----------------------------------------------------------

#2015-05-15 Uppdaterat lasning av DS2450 A/D converter
#Kolla upp vad detta script gor i relation med graph.sh och grafx2.sh 
#Det verkar vara nagon sort mix som inte verkar spec logisk

filename=read_1wire.sh
homedir=/home/pi/datalogger		#06-09
output_file=temp.data
read_time="" #Time when the data file is created
echo "a->"  `pwd` >> $homedir/read.log
echo "b->"  `pwd` >> $homedir/read.log
cd $homedir
source givare.sh
echo "c->"  `pwd` >> $homedir/read.log
echo "d->"  `ls /mnt/1wire/30.5F7AB5120000/typeK/temperature` >> $homedir/read.log
echo "e->"  `cat /mnt/1wire/30.5F7AB5120000/typeK/temperature` >> $homedir/read.log
echo >> $homedir/read.log

#./ESIC-test.sh
#sleep 10
#echo   `date` >> read.log
#echo  " " `env`
#echo  " " `env` >> read.log
#echo -n `date` >> read.log
#echo -n " " `ps` >> read.log
#echo " " `pwd` >> read.log
# Read data from sensors
T1=`cat /mnt/1wire/$t1/temperature`
T2=`cat /mnt/1wire/$t2/temperature`
T3=`cat /mnt/1wire/$t3/temperature`
T4=`cat /mnt/1wire/$t4/temperature`
T5=`cat /mnt/1wire/$t5/temperature`
T6=`cat /mnt/1wire/$t6/temperature`
T7=`cat /mnt/1wire/$t7/temperature`
T8=`cat /mnt/1wire/$t8/temperature`
T9=`cat /mnt/1wire/$t9/temperature`
T10=`cat /mnt/1wire/$t10/temperature`
T11=`cat /mnt/1wire/$t11/temperature`
T12=`cat /mnt/1wire/$t12/typeK/temperature`
echo "T12:" $T12
echo "T12:" $T12 >>  T112.txt
VALL=`cat /mnt/1wire/$v12/volt.ALL`
V2ALL=`cat /mnt/1wire/$v12/volt2.ALL`
VA=`cat /mnt/1wire/$v12/volt.A`
VB=`cat /mnt/1wire/$v12/volt.B`
VC=`cat /mnt/1wire/$v12/volt.C`
VD=`cat /mnt/1wire/$v12/volt.D`
V2A=`cat /mnt/1wire/$v12/volt2.A`
V2B=`cat /mnt/1wire/$v12/volt2.B`
V2C=`cat /mnt/1wire/$v12/volt2.C`
V2D=`cat /mnt/1wire/$v12/volt2.D`

AVALL=`cat /mnt/1wire/$v13/volt.ALL`
AV2ALL=`cat /mnt/1wire/$v13/volt2.ALL`
AVA=`cat /mnt/1wire/$v13/volt.A`
AVB=`cat /mnt/1wire/$v13/volt.B`
AVC=`cat /mnt/1wire/$v13/volt.C`
AVD=`cat /mnt/1wire/$v13/volt.D`
AV2A=`cat /mnt/1wire/$v13/volt2.A`
AV2B=`cat /mnt/1wire/$v13/volt2.B`
AV2C=`cat /mnt/1wire/$v13/volt2.C`
V2D=`cat /mnt/1wire/$v12/volt2.D`

read_time=`date`

#We remove here as it takes time to read all sensors, so the time when there
# arn't any file is short
rm $output_file

# Save data
echo ","$read_time";" > $output_file
echo ","$T1";" >> $output_file
echo ","$T2";" >> $output_file
echo ","$T3";" >> $output_file
echo ","$T4";" >> $output_file
echo ","$T5";" >> $output_file
echo ","$T6";" >> $output_file
echo ","$T7";" >> $output_file
echo ","$T8";" >> $output_file
echo ","$T9";" >> $output_file
echo ","$T10";" >> $output_file
echo ","$T11";" >> $output_file
echo ","$T12";" >> $output_file
echo ","$VALL";" >> $output_file
echo ","$V2ALL";" >> $output_file
echo ","$AVALL";" >> $output_file
echo ","$AV2ALL";" >> $output_file

echo "T12:" $T12
echo "T12:" $T12 >>  T112.txt

echo $T1 > T1.data
echo $T2 > T2.data
echo $T3 > T3.data
echo $T4 > T4.data
echo $T5 > T5.data
echo $T6 > T6.data
echo $T7 > T7.data
echo $T8 > T8.data
echo $T9 > T9.data
echo $T10 > T10.data
echo $T11 > T11.data
echo $T12 > $homedir/T12.data
echo $VALL > VALL.data
echo $V2ALL > V2ALL.data
echo $VA > VA.data
echo $VB > VB.data
echo $VC > VC.data
echo $VD > VD.data
echo $V2A > V2A.data
echo $V2B > V2B.data
echo $V2C > V2C.data
echo $V2D > V2D.data
echo $AVALL > VALL.data
echo $AV2ALL > V2ALL.data
echo $AVA > VA.data
echo $AVB > VB.data
echo $AVC > VC.data
echo $AVD > VD.data
echo $AV2A > V2A.data
echo $AV2B > V2B.data
echo $AV2C > V2C.data
echo $AV2D > V2D.data

echo "T12:" $T12
echo "T12:" $T12 >>  T112.txt

#For webserver dictory
#sudo cp $output_file /var/www/logs/.
#sudo cp T*.data /var/www/logs/.
#sudo cp V*.data /var/www/logs/.

grep 10:: ESIC-temp >giv10
grep 11:: ESIC-temp >giv11
grep 21:: ESIC-temp >giv21
grep 24:: ESIC-temp >giv24    #2021-01-13
grep 34:: ESIC-temp >giv34
grep 44:: ESIC-temp >giv44
grep 54:: ESIC-temp >giv54
grep 74:: ESIC-temp >giv74
sudo cp giv* /var/www/logs/.


grep 10:: ESIC-temp | cut -c 6-9 > temp10
grep 10:: ESIC-temp | cut -c 12-13 > hum10
#grep 11:: ESIC-temp | cut -c 6-9 > temp11
#grep 11:: ESIC-temp | cut -c 12-13 > hum11
grep 11:: ESIC-temp |  awk '{print $2;}' >temp11
grep 11:: ESIC-temp |  awk '{print $3;}' >hum11
grep 24:: ESIC-temp |  awk '{print $2;}' >temp24
grep 24:: ESIC-temp |  awk '{print $3;}' >hum24

grep 21:: ESIC-temp | cut -c 6-9 > temp21
grep 21:: ESIC-temp | cut -c 12-13 > hum21
#grep 24:: ESIC-temp | cut -c 6-9 > temp24    #2020-01-13
#grep 24:: ESIC-temp | cut -c 12-13 > hum24     #2020-01-13
grep 34:: ESIC-temp | cut -c 6-9 > temp34
grep 34:: ESIC-temp | cut -c 12-13 > hum34
grep 44:: ESIC-temp | cut -c 6-9 > temp44
grep 44:: ESIC-temp | cut -c 12-13 > hum44
grep 54:: ESIC-temp | cut -c 6-9 > temp54
grep 54:: ESIC-temp | cut -c 12-13 > hum54
grep 74:: ESIC-temp | cut -c 6-9 > temp74
grep 74:: ESIC-temp | cut -c 12-13 > hum74
#For webserver dictory
#sudo cp temp* /var/www/logs/.
#sudo cp hum* /var/www/logs/.
#sudo cp ESIC-temp /var/www/logs/.
#/usr/lib/cgi-bin/test3 > ESIC-temp.html
exit 0
Skriv svar