• Opret dig
  • Glemt adgangskode

User account menu

  • Artikler
  • Forside
  • Forum
  • Nyheder
  • Log ind
Hjem
LinuxIN.dk

Snak med

Opret dig!

Af peque | 13.04.2021 07:21

[LØST] Kørsel af script via Crontab - Forskelle fra normal kørsel

Hjælp generelt
Hej Forum

Jeg har på mit arbejde lavet et lille script der gerne skulle importere noget data fra Excel til MySQL således det kan visualiseres for brugerne!
Fra vores ERP system exporteres 3 XLSX filer - som jeg via et script - gerne vil indsætte i databasen på en host.
Mit script virker upåklageligt så længe jeg kører det manuelt - Men når jeg kører det via Cronjob - ser alt OK - melder ingen fejl - Men indsætter ikke data til data basen - Så kan jeg manuelt efterfølgende køre jobbet og alt data kommer ind som forventet

Er der nogen der kan forklare dette - eller se hvad der mangler siden dette ikke vil køre automatisk
Jeg har lavet en config fil som indeholder password etc mm:

#!/bin/bash
#########################################################
# This script checks for .xlsx files and converts #
# these to .csv and inserts content into MySQL DB #
#########################################################
# External config/variables can be found in /.config.sh.

#Adding information from static config file
[ -r /scripts/meraimport/config.sh ] && . /scripts/meraimport/config.sh

#Splash Intro
echo "################################################" >> $LOG
echo "#Script indsætter data fra MERA. Build: rc-1.0c#" >> $LOG
echo "################################################" >> $LOG
echo " " >> $LOG
echo "Today is $FDATE and starting Mera Data Import." >> $LOG
echo " " >> $LOG
echo "Changing to import dir: $SYSTEMDIR" >> $LOG
cd $SYSTEMDIR

echo " " >> $LOG
echo "Looking for new Mera Exports..." >> $LOG
LIST=(`find ./ -maxdepth 1 -name "*.xlsx"`)
if [ ${#LIST[@]} -gt 0 ];
then
for f in *.xlsx
do
echo " $f - Found!" >> $LOG
done
echo " " >> $LOG
echo "Converting to .csv" >> $LOG
echo "This might take a while..." >> $LOG
for f in *.xlsx
do
/usr/local/bin/in2csv --no-inference $f > ./output/${f%.*}.csv 2> /dev/null
echo " $f - Done!" >> $LOG
done

echo " " >> $LOG
echo "Inserting Rows from generated .csv" >> $LOG
CSVLIST=(`find $SYSTEMDIR/output/ -maxdepth 1 -name "*.csv"`)
if [ ${#CSVLIST[@]} -gt 0 ];
then
for f in $SYSTEMDIR/output/*.csv
do
noPath=${f##*/}
noExt=${noPath%.*}
/usr/local/bin/csvsql --db mysql+mysqlconnector://$dbUser:$dbPass@$dbString:$dbPort/$dbSchema --tables $noExt --no-create --insert < $f >> $DLOG
echo " Success - inserting $noPath into Table: $noExt - Done!" >> $LOG
STATUS='0'
done

echo " " >> $LOG
echo "Cleaning up temporary files.." >> $LOG
rm ./output/*

echo " " >> $LOG
echo "Create save folder if not exist.." >> $LOG
if [[ ! -e $SAVEDIR ]];
then
mkdir $SAVEDIR
echo "Folder created" >> $LOG
elif [[ ! -d $SAVEDIR ]];
then
echo "$SAVEDIR already exists but is not a directory" >> $LOG
fi

echo " " >> $LOG
echo "Moving imported xlsx files to save directory" >> $LOG
mv merae744.xlsx $SAVEDIR/merae744_$DATE.xlsx
mv merae745.xlsx $SAVEDIR/merae745_$DATE.xlsx
mv merae746.xlsx $SAVEDIR/merae746_$DATE.xlsx

echo " " >> $LOG
echo "Done moving files - Deleting files above 7days" >> $LOG
# find $SYSTEMDIR/save/* -mtime +7 -exec rm {} \;

echo " " >> $LOG
echo "Changing permission on save folder" >> $LOG
chown -R mera:mera $SYSTEMDIR/save

echo " " >> $LOG
echo " - Done!" >> $LOG

echo " " >> $LOG
echo "Zipping the logfiles and prepare for mail." >> $LOG
cd /tmp
bzip2 -k -z --best dbinsert.log

echo " " >> $LOG
echo "Sending email to $ADMIN and closes the script." >> $LOG

STATUS='0'
else
echo "$FDATE - NO CONVERTED FILES FOUND..." >> $LOG
echo "Exiting Script - NO IMPORTED DATA.." >> $LOG
STATUS='1'
break
fi

else
echo "$FDATE: - No Files found!!!!" >> $LOG
echo "Verify that MERA has exported files" >> $LOG
echo "Exiting Script - NO IMPORTED DATA.." >> $LOG
STATUS='1'
fi

if [ $STATUS -gt 0 ];
then
mail -s "FAILURE IN MERA DATA IMPORT - $DATE" $IT < $LOG
echo "$FDATE: FAILUIRE importing mera Data - Investigate ASAP" >> $INSALOG
else
echo "$FDATE: SUCCESSFULL import of mera data" >> $INSALOG
cat $LOG |mutt -a $DLOG.bz2 -s "Success Mera Import Script: $DATE" -b $ANMO -b $KN -b$IT
rm -rf $DLOG.bz2
fi

#EOF



Meningen er dette script skal køre auto hver morgen og opdatere de seneste ordre indgang mm
Men jeg kan simpelthen ikke se hvor dette går galt - hvordet virker ved manuel kørsekl og ikke via crontab

PFT
P

  • Log ind eller opret dig for at tilføje kommentarer

Kommentarer6

# 1

4 år 2 måneder siden

Permalink

Indsendt af mich den 13. april 2021 kl. 13:51

Permalink

Noget med rettigheder?

Hvilken bruger kører du som manuelt?
Hvilken bruger kører cron som?
  • Log ind eller opret dig for at tilføje kommentarer

# 2

4 år 2 måneder siden

Permalink

Indsendt af peque den 13. april 2021 kl. 14:23

Permalink

Begge som root
Både manuelt

Begge som root

Både manuelt og via crontab
  • Log ind eller opret dig for at tilføje kommentarer

# 3

4 år 2 måneder siden

Permalink

Indsendt af ejvindh den 13. april 2021 kl. 15:51

Permalink

Hvis det var mig, der havde

Hvis det var mig, der havde sådan et problem, ville jeg nok indsætte nogle flere informerende echo-kommandoer undervejs, som kunne afdække forskellene. F.eks. i dine for-løkker, indsætte et echo for hver, så man kunne tælle, hvor mange instanser, der findes. Så logfilen giver nogle indikationer af forskellene.

Tænker på, om der kan være et problem omkring nogle af de angivne fil-stier? At det ser forskelligt ud på de forskellige miljøer?
  • Log ind eller opret dig for at tilføje kommentarer

# 4

4 år 2 måneder siden

Permalink

Indsendt af ejvindh den 13. april 2021 kl. 16:32

Permalink

En ekstra ide: Tænker på

En ekstra ide: Tænker på (men ved det ikke) om cronjobbet sættes i gang fra en genvej. Så når scriptet kører:

LIST=(`find ./ -maxdepth 1 -name "*.xlsx"`)

så opfattes "./" som den mappe, hvorfra genvejen opererer, og så finder den ingen filer, da disse ligger andetsteds...

Ved i hvert fald at dette kan være et problem, når jeg kører scripts i en desktop-linux. At man skal lige huske med at CD'e sig ind i den rigtige mappe.
  • Log ind eller opret dig for at tilføje kommentarer

# 5

4 år 2 måneder siden

Permalink

Indsendt af mich den 13. april 2021 kl. 22:20

Permalink

Gode kommentarer fra

Gode kommentarer fra ejvindh.

Kan du se, om scriptet konverterer xlxs-filerne til csv, når det kører som cron-job, eller om det fejler før konverteringen?
Det vil give nogle pejlemærker.
  • Log ind eller opret dig for at tilføje kommentarer

# 6

4 år 2 måneder siden

Permalink

Indsendt af peque den 29. april 2021 kl. 10:02

Permalink

Fik løst det
Hovedsageligt

Fik løst det

Hovedsageligt er de fleste ting om fuld path - Men fik løst det ved at lave min $SYSTEMDIR således det kører den fulde sti

csvkit drillede en smule efterfølgende grundet unique kolloner og duplicates - Men fandt et prefix til csvsql som ignore

Så alle ting er løst nu!

P
  • Log ind eller opret dig for at tilføje kommentarer

Svar søges

den er sjov 0
llumos Unix-operativsystem, 0
Den er go 0
14. februar = I Love Free Software Day 0
Lokal fil-deling - for de dovne. 0

Seneste aktivitet

PcLinuxOS er død længe leve Pclosdebian 11
Reserve kernel og btrfs 1
En snak om Linux-kompatibel software 12
PCLinuxOS 28
"Intet realistisk alternativ" - mig i r*ven 17
Open source events i danmark? 3
Virtuel maskine? 4
Gode anmeldelser Zorin OS 17.3 8
Open Source-eksperimentet 5
Nulstilling af adgangskode 6
Ingen Mint 5
Linux App Store Flathub når 3 milliarder downloads 2
Digitaliseringsministeriet sætter gang i pilotprojekt om digital suverænitet 3
Mest sikker webbrowser 5
Firefox 2
Privatbeskeder 7
Backup/synkronisering? 3
BigLinux 5
Chatgpt satire 1
Læsning af databasefil i Firefox 2

© 2025 Linuxin og de respektive skribenter

Oprettet og drevet af nørder siden 2004 !