Avatar billede mergelspir Seniormester
19. februar 2021 - 16:57 Der er 4 kommentarer

Hvordan kalder man en funktion fra et Linux web-CGI-script?

Jeg har to CGI scripts med den samme funktion: logmsg. I det første script fungerer log-funktionen fint. I det andet script kan jeg ikke få log-funktionen til at skrive i log-filen.

Følgende script (testlog.cgi) virker fint. Det skriver i logfilen, når jeg kører det fra en Linux command prompt:

#!/bin/bash
LOG_FILE=$(date +"%Y%m%dlog.txt")
LOG_TIME=$(date +"[%Y %m %d %T]")
function logmsg {
echo "$LOG_TIME ${*}" >> $HOME/log/${LOG_FILE}
}
echo "testlog"
echo ${LOG_FILE}
echo ${LOG_TIME}
logmsg "testlog"

Det andet script (testhtml.cgi) skriver pænt nok i mit Firefox browser-vindue, når jeg kalder det fra Firefox. Men skriver *ikke* noget i log-filen. Hvorfor ikke?!?

#!/bin/bash
LOG_FILE=$(date +"%Y%m%dlog.txt")
LOG_TIME=$(date +"[%Y %m %d %T]")
function logmsg {
echo "$LOG_TIME ${*}" >> $HOME/log/${LOG_FILE}
}
logmsg "testhtml.cgi"
echo 'Content-type: text/html'
echo ''
echo '<html><head><title>Test of testhtml.cgi</title></head><body>'
echo 'testhtml.cgi'
echo '</body>'
echo '</html>'
exit 0

Jeg mistænker $HOME for at være synderen.
Måske $HOME ikke er den samme i de to eksempler, selvom de to scripts ligge i samme katalog på linux-serveren.
MEN, jeg kan kun finde ud af at skrive $HOME ud i testlog.cgi
Jeg kan ikke finde ud af at skrive $HOME ud i testhtml.cgi
Det er den rene elendighed...

Hjælp!!

Med venlig hilsen
Allan
Avatar billede arne_v Ekspert
19. februar 2021 - 17:13 #1
$HOME for en interaktiv bruger er brugernavnets hjemme katalog.

CGI scripts køres normalt under en nobody account, så gudern må vide hvad $HOME er eller om den overhovedet er sat.

Så oplagt spørgsmål er: virker det med en fuld hardcoded sti altså uden $HOME?
Avatar billede mergelspir Seniormester
19. februar 2021 - 18:49 #2
Jeg har nu prøvet med både en hardcoded absolut sti og en relativ sti.
Der er ikke skrevet noget i den bestående logfil.
Der er heller ikke oprettet nogen ny logfil andetsteds.
Er det muligt at få en fejlkode, hvis jeg nu tilfældigvis prøver at skrive log-filen i et katalog, der ikke kan skrives i?
Avatar billede arne_v Ekspert
19. februar 2021 - 19:14 #3
Det kunne være problemet.

Har en nobody process skrive adgang til filen?
Avatar billede mergelspir Seniormester
19. februar 2021 - 20:47 #4
Det burde den have.
For at være helt sikker, har jeg nu sat rettigheder på log-filen til 666 (de var før 644), men det gør ingen forskel.
Altså:
Rettighederne til /log - kataloget er 722.
Rettighederne til /20210219log.txt filen er nu 666 (rettet fra 644)
log-filen ligger her: <account>/log/20210219log.txt
CGI-script ligger her: <account>/public-html/<domaine>/cgi-bin/testhtml.cgi
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester