Bekijk Volledige Versie : SH script uitvoeren in cron
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
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 :)
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.
Er gebeurt niks helaas :( heb je nog een ander idee?
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 :)
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.
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.
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.
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 :(
ok , wat is de output van het script als je hem run vanaf de CLI runt en als je niet in je homedirectory zit ?
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
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....
En
/home/gta/samp02X/./checksamp.sh
al geprobeerd?
#!/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
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!
#!/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. :)
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
En dan checksamp "server_start" uit laten voeren?
En is het ook mogelijk om de logfile dan meteen de datum mee te geven?
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
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
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?
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)
*kickje*
Niemand die me verder kan helpen? Of enig idee waar ze dat wel kunnen?
ik wil best even kijken naar je server, pm me maar ;)