PDA

Bekijk Volledige Versie : SH script uitvoeren in cron



Mattie
22/11/08, 11:20
Hallo mensen,

Ik heb een probleem met een script wat de status van mijn samp(gta) server checkt. Het bevint zich in /home/gta/samp02X en heet checksamp.sh
Als ik naar die dir 'cd' en dan ./checksamp.sh doet werkt het script, maar zodra ik het in de cron zet gebeurt er nix (de server gaat niet aan in iedergeval).
Dit is het script:


#!/bin/sh

PROCESS_COUNT=$(ps -fu gta | grep samp02Xsvr | grep -v grep | wc -l)
case $PROCESS_COUNT in
0) /home/gta/samp02X/samp02Xsvr &
;;
1) #OK, program is already running once
;;
*) #OK, program is already multiple times
;;
esac


En dit staat er in mn cron:



* * * * * gta sh /home/gta/samp02X/checksamp.sh

(hij chekt dus iedere minuut)

Dit zegt mn /var/log/crond


Nov 22 10:19:01 s01 crond[31266]: (gta) CMD (sh /home/gta/samp02X/checksamp.sh)


Nogmaals de server wordt dus niet gestart wanneer deze offline is, en handmatig ./checksamp doen werkt wel (de server wordt dan WEL gestart).

Wat doe ik hier fout?

Matthijs

edit: Het gaat hier om CentOS5

Japje
22/11/08, 11:43
probeer eens een chmod +x /home/gta/samp02X/checksamp.sh en pas je cron aan naar:

* * * * * gta /home/gta/samp02X/checksamp.sh

mogelijk dat het dan wel werkt :)

Mattie
22/11/08, 11:45
Die file was al 777 :)
Maar ik heb de cron even veranderd, zodra ik straks weer even nieuwe versie van het script upload ga ik even proberen of het werkt.

Mattie
22/11/08, 12:33
Er gebeurt niks helaas :( heb je nog een ander idee?

Japje
22/11/08, 12:40
hmnz, zet eens bovenaan in je script:

touch /home/gta/blup

en kijk of de file blup word aangemaakt, dan weet je dat het script word uitgevoerd. Daarna kun je gaan kijken of het iets te maken heeft met paden, of dat het aan sh ligt. (probeer eens #!/bin/bash ipv sh)

probeer eens grep aan te passen naar /bin/grep, zelfde voor wc en ps

als cron zegt dat ie word uitgevoerd dan is dat meestal ook wel zo :)

ewoutz
22/11/08, 17:53
waarschijnlijk wordt het script wel gerunt , echter moet je even kijken in het script "/home/gta/samp02X/samp02Xsvr".

het kan zijn dat deze geen absolute paden gebruikt.

Mattie
22/11/08, 18:18
Het script (checksamp.sh) staat hierboven al, samp02Xsvr is zegmaar de ".exe" als ik deze edit krijg ik allemaal vreemde tekens. Ik zal die tip van Japje asap even proberen.

ewoutz
22/11/08, 20:44
Het script (checksamp.sh) staat hierboven al, samp02Xsvr is zegmaar de ".exe" als ik deze edit krijg ik allemaal vreemde tekens. Ik zal die tip van Japje asap even proberen.

wat je ook nog even kan doen is in het sh script zetten

cd /home/gta/samp02X/

het kan zijn dat die 'exe' dat nodig heeft.

Mattie
22/11/08, 23:59
Ik heb nu dit:



#!/bin/sh

touch /home/gta/blup

PROCESS_COUNT=$(/bin/ps -fu gta | /bin/grep samp02Xsvr | /bin/grep -v /bin/grep | /usr/bin/wc -l)
case $PROCESS_COUNT in
0) cd /home/gta/samp02X/ | /home/gta/samp02X/samp02Xsvr &
;;
1) #OK, program is already running once
;;
*) #OK, program is already multiple times
;;
esac


de file blub wordt aangemaakt, verder gebeurt er nix :(

ewoutz
23/11/08, 01:57
ok , wat is de output van het script als je hem run vanaf de CLI runt en als je niet in je homedirectory zit ?

Mattie
23/11/08, 10:15
Dan gebeurt er ook nix helaas :(
Ik heb geprobeerd:

/home/gta/samp02X/checksamp.sh
en:

sh /home/gta/samp02X/checksamp.sh
en:

/bin/sh /home/gta/samp02X/checksamp.sh

daveww
24/11/08, 16:04
Dan denk ik dat je toch iets fout doet, dit zou namelijk moet werken.



#!/bin/sh

touch /home/gta/blup

PROCESS_COUNT=$(/bin/ps -fu gta | /bin/grep samp02Xsvr | /bin/grep -v /bin/grep | /usr/bin/wc -l)
case $PROCESS_COUNT in
0) cd /home/gta/samp02X/ | /home/gta/samp02X/samp02Xsvr &
;;
1) #OK, program is already running once
;;
*) #OK, program is already multiple times
;;
esacAls hij steeds via de cronjob die file touched, dan wil het zeggen dat hij uitgevoerd wordt echter zit er dan mogelijk een fout in het script.

PowerSp00n
24/11/08, 17:24
Anders kijk je even in de cron mailtjes die je krijgt, dat kan duidelijkheid geven over wat er fout gaat....

Verm_Hans
24/11/08, 17:42
En

/home/gta/samp02X/./checksamp.sh
al geprobeerd?

Nielsvk
24/11/08, 18:04
#!/bin/sh

touch /home/gta/blup

PROCESS_COUNT=$(/bin/ps -fu gta | /bin/grep samp02Xsvr | /bin/grep -v /bin/grep | /usr/bin/wc -l)
case $PROCESS_COUNT in
0) /home/gta/samp02X/samp02Xsvr &
;;
1) #OK, program is already running once
;;
*) #OK, program is already multiple times
;;
esac

Mattie
24/11/08, 23:09
sh /home/gta/samp02X/ ./checksamp.sh
geeft:
/home/gta/samp02X/: /home/gta/samp02X/: is a directory




/home/gta/samp02X/ ./checksamp.sh
geeft:
/bin/bash: /home/gta/samp02X/: is a directory


zonder " sh" in de cron wordt de file blub ook aangemaakt.

En als ik " /home/gta/samp02X ./samp02Xsvr &" in het script zet krijg ik dit


/home/gta/samp02X/checksamp.sh: line 7: /home/gta/samp02X/: is a directory

Het script wordt dus wel uitgevoerd....

Echter " /home/gta/samp02X/samp02Xsvr & " runnen vanuit een andere map dan /home/gta/samp02X werkt ook niet, zal er dan toch iets anders zijn?

Of mischien anders in checksamp.sh dit laten uitvoeren


#!/bin/bash

server_start() {
/home/sampsvr/startgtaserver.sh & # put in full path and name of startup script
}

server_stop() {
killall startgtaserver.sh # your startup script name
killall samp02svr # need to put in path to killall if its not in $PATH
}

server_restart() {
server_stop
sleep 1
server_start
}
case "$1" in
'start')
server_start
;;
'stop')
server_stop
;;
'restart')
server_restart
;;
*)
echo "usage $0 start|stop|restart"
esac


komt van http://wiki.sa-mp.com/wiki/Linux_Server


bedankt voor de moeite!

Nielsvk
24/11/08, 23:13
#!/bin/sh

touch /home/gta/blup

PROCESS_COUNT=$(/bin/ps -fu gta | /bin/grep samp02Xsvr | /bin/grep -v /bin/grep | /usr/bin/wc -l)
case $PROCESS_COUNT in
0) /home/gta/samp02X/samp02Xsvr &
;;
1) #OK, program is already running once
;;
*) #OK, program is already multiple times
;;
esac


sh /home/gta/samp02X/checksamp.sh

./ gebruik je alleen als je in de map zelf zit. :)

wonko
24/11/08, 23:27
probeer het volgende even:



#!/bin/bash

server_start() {
# naar de juiste map navigeren
cd /home/gta/samp02X
# starten, in de achtergrond
/home/gta/samp02X/samp02Xsvr &
# of
# /home/gta/samp02X/samp02Xsvr > output.log 2>&1 &
}

server_stop() {
# stoppen van het script
killall samp02svr
}

server_restart() {
server_stop
sleep 1
server_start
}

case "$1" in
'start')
server_start
;;
'stop')
server_stop
;;
'restart')
server_restart
;;
*)
echo "usage $0 start|stop|restart"
esac

Mattie
25/11/08, 08:55
En dan checksamp "server_start" uit laten voeren?
En is het ook mogelijk om de logfile dan meteen de datum mee te geven?

wonko
25/11/08, 09:14
Je check-script geef je volgende inhoud:



#!/bin/sh

killall -0 samp02Xsrv || /pad/naar/het/ander/script start


Als je je ander script in /home/gta/ hebt gezet met de naam samp, wordt dat dus



#!/bin/sh

killall -0 samp02Xsrv || /home/gta/samp start

Mattie
25/11/08, 10:03
Het gaat er juist om dat dat chekscript kijkt of de server al draait, moet in dan dus het volgende doen:

checksamp.sh:


#!/bin/sh

touch /home/gta/blup

PROCESS_COUNT=$(/bin/ps -fu apache | /bin/grep samp02Xsvr | /bin/grep -v /bin/grep | /usr/bin/wc -l)
case $PROCESS_COUNT in
0) /usr/local/bin/gtaserver start
;;
1) #OK, program is already running once
;;
*) #OK, program is already multiple times
;;
esac


En nogmaals gtaserver in /usr/local/bin



#!/bin/bash

server_start() {
# naar de juiste map navigeren
cd /home/gta/samp02X
# starten, in de achtergrond
/home/gta/samp02X/samp02Xsvr &
# of
# /home/gta/samp02X/samp02Xsvr > output.log 2>&1 &
}

server_stop() {
# stoppen van het script
killall samp02Xsvr
}

server_restart() {
server_stop
sleep 1
server_start
}

case "$1" in
'start')
server_start
;;
'stop')
server_stop
;;
'restart')
server_restart
;;
*)
echo "usage $0 start|stop|restart"
esac




Checksamp.sh wordt dus iedere minuut uitgevoerd door de cron, draait de server dan doet ie nix. Is de server uit dan voert ie dat 2escript uit /usr/local/bin/gtaserver start

Zo moet het toch kloppen?


edit: Als ik dit doe krijg ik als de server uit is dit in mn cron mail:

/home/gta/samp02X/checksamp.sh: line 7: gtaserver start: command not found

Japje
25/11/08, 10:38
Checksamp.sh wordt dus iedere minuut uitgevoerd door de cron, draait de server dan doet ie nix. Is de server uit dan voert ie dat 2escript uit /usr/local/bin/gtaserver start

Zo moet het toch kloppen?


edit: Als ik dit doe krijg ik als de server uit is dit in mn cron mail:

/home/gta/samp02X/checksamp.sh: line 7: gtaserver start: command not found

staat gtaserver (dat scriptje dus) wel in de goeie map? /usr/local/bin?
en staat ie op chmod +x?

cq, kun je vanaf je console direct het commando, gtaserver gebruiken?

Mattie
25/11/08, 10:52
ls -la in /usr/local/bin

-rwxrwxrwx 1 root root 474 Nov 25 08:10 gtaserver




[matthijs@s01 ~]$ gtaserver
usage /usr/local/bin/gtaserver start|stop|restart


Dat werkt dus ook (vanuit een andere user/dir)

Mattie
30/11/08, 11:05
*kickje*

Niemand die me verder kan helpen? Of enig idee waar ze dat wel kunnen?

VinceSTM
30/11/08, 11:12
ik wil best even kijken naar je server, pm me maar ;)