Visa obesvarade inlägg | Visa aktiva trådar Aktuellt datum och tid: 22 okt 2018, 09:27



Svara på tråd  [ 11 inlägg ] 
 Mysql script problem 
Författare Meddelande

Blev medlem: 17 jan 2011, 17:12
Inlägg: 12
OS: Annat GNU/Linux
Svara med citat
 Mysql script problem
Hej linux folks
Jag skulle behöva lite hjälp med att få en script att fungera att köra från crontab.
Det skripten ska göra är att kolla om mysql statusen är start/running eller stop/waiting.
Och ifall statusen är stop/waiting så ska den slå igång mysql så att statusen bilr start/running.
Jag har en script som jag hittat på nätet som fungerar när jag kör den manuelt. Men det konstiga är att när jag kör den som crontab job så fungerar det inte.
Av någon anledning så får jag INTE samma output text när jag kör /etc/init.d/mysql status via cronjob/crontab som när jag kör samma kommando manuelt direkt.
Output texten ska ju bli någont som typ:
Kod:
mysql start/running, process 17355

Men på crontab blir den:
Kod:
* /usr/bin/mysqladmin  Ver 8.42 Distrib 5.5.55, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Server version          5.5.55-0ubuntu0.14.04.1
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/run/mysqld/mysqld.sock
Uptime:                 2 hours 25 min 59 sec

Threads: 3  Questions: 1188265  Slow queries: 0  Opens: 7143  Flush tables: 1  Open tables: 400  Queries per second avg: 135.662


Och därför så fungerar ju inte scripten häller.

Såhär ser scripten ut:

Kod:
#!/bin/bash
UP=$(/etc/init.d/mysql status | grep running | grep -v not | wc -l);
if [ "$UP" -ne 1 ];
then
        echo "MySQL is down.";
        service mysql start

else
        echo "Mysql is still running.";
fi


Scripten fungerar när jag kör den manuelt men inte som cronjob/crontab för root.
Om man kör crontab från en annan user än root så står det alltid att mysql inte kör fast den kör.
Någon som vet vad felet är?

Jag kör ubuntu server 14.04.5 LTS
Mysql v5.5.55
Körs på VMware VPS

_________________
https://zampeslinux.se


09 maj 2017, 18:35
Profil WWW
Serveradmin
Användarvisningsbild

Blev medlem: 22 okt 2006, 09:13
Inlägg: 3667
Ort: Svedala
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg Re: Mysql script problem
En av sakerna man behöver lära sig med cronjobb är att de inte exekveras med riktigt samma miljö som den man får vid inloggning i ett skal / en terminal. Däribland PATH variablen är inte alltid satt så som man förväntar sig. Då finner man alltså inte alltid sökvägen till binärer. Därför är det klokt att skriva script som skall köras som cronjobb med fulla sökvägar till binärer. T.ex i ditt fall:
Kod:
#!/bin/bash
UP=$(/etc/init.d/mysql status | grep running | grep -v not | wc -l);
if [ "$UP" -ne 1 ];
then
        echo "MySQL is down.";
       /usr/sbin/service mysql start

else
        echo "Mysql is still running.";
fi

Alternativt ser man till att cronjobben läser in den miljö man vill ha:
Kod:
#!/bin/bash
source /etc/profile
UP=$(/etc/init.d/mysql status | grep running | grep -v not | wc -l);
if [ "$UP" -ne 1 ];
then
        echo "MySQL is down.";
        service mysql start

else
        echo "Mysql is still running.";
fi

Det finns såklart ett otal varianter, men det är det som är principen.


09 maj 2017, 20:18
Profil WWW

Blev medlem: 17 jan 2011, 17:12
Inlägg: 12
OS: Annat GNU/Linux
Svara med citat
Inlägg Re: Mysql script problem
Tack för hjälpen johanre.
Dok så får jag fortfarande inte riktigt till det.
Jag får fortfarande samma output text fastän jag lägger till
Kod:
source /etc/profile

Jag provade köra med
Kod:
source ~/.profile

men fortfarande med samma resultat.
Är det något mer jag måste lägga till i scripten?

_________________
https://zampeslinux.se


10 maj 2017, 11:14
Profil WWW
Användarvisningsbild

Blev medlem: 08 aug 2010, 13:49
Inlägg: 2496
Ort: Göteborg
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg Re: Mysql script problem
Om det är ett PATH-problem, så hjälper det inte att läsa in /etc/profile. Pröva johanres första förslag i stället.


10 maj 2017, 12:00
Profil

Blev medlem: 17 jan 2011, 17:12
Inlägg: 12
OS: Annat GNU/Linux
Svara med citat
Inlägg Re: Mysql script problem
Gunnar Hjalmarsson skrev:
Om det är ett PATH-problem, så hjälper det inte att läsa in /etc/profile. Pröva johanres första förslag i stället.


Jag prövade göra så också men med samma resultat.

_________________
https://zampeslinux.se


10 maj 2017, 13:01
Profil WWW
Användarvisningsbild

Blev medlem: 06 apr 2008, 00:09
Inlägg: 5208
Ort: Göteborg/Mölndal/Falkenberg
OS: Ubuntu
Svara med citat
Inlägg Re: Mysql script problem
När det gäller cron-jobb, så bör man alltid själv ange hela path:en till ett kommando. Det vill säga att man alltid anger "/bin", "/usr/bin", "/sbin", "/usr/sbin" eller vad det nu är framför ett kommando, istället för att förvänta sig att systemet letar upp det som det gör i en interaktiv shell. Nu är det iofs inget problem med "/bin" och "/usr/bin" eftersom man knappast kan undvika att ha den i sin PATH, men allt annat bör uttryckligen anges... :)

_________________
Agera genom att ta och behålla initiativet, ta de risker detta kräver...
http://www.enargo.com/it/
OpenVMS Shark - i Linux finns inte SYS$CMKRNL...


10 maj 2017, 16:24
Profil WWW

Blev medlem: 17 jan 2011, 17:12
Inlägg: 12
OS: Annat GNU/Linux
Svara med citat
Inlägg Re: Mysql script problem
Nu uppdaterade jag scripten till:
Kod:
#!/bin/bash
PATH=/bin:/usr/bin:/use/sbin
source /etc/profile
UP=$(/etc/init.d/mysql status | grep stopped | grep -v not | wc -l);
if [ "$UP" -ne 0 ];
then
        echo "MySQL is down.";
        /etc/init.d/mysql start

else
        echo "Mysql is still running.";
fi


Denna fungerar.
Men det blev inte helt som jag tänkte i börja.
Om jag förstått detta rätt så när crontab kör
Kod:
/etc/init.d/mysql status
så loggar den in på mysql server med den info som finns under /etc/mysql/debian.cnf och visar samma typ av status info som om du logga in i mysql och skriver
Kod:
mysql> status

Men när man kör manuellt i shell /etc/init.d/mysql status
så får man t.ex. denna info:
Kod:
mysql start/running, process 6665

Jag antar att felet kanske är i scripten för mysql "/etc/init.d/mysql"

Jag märkte också att nu när jag kör htop så visas mysql processerna lite annorlunda.
Förr stod det bara /usr/sbin/mysqld under Command.
Och nu står det
Kod:
/usr/sbin/mysqld --basdir=/usr --datadir=/var/lib/mysql --plugins=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306

Det är inget problem för mig. Men det skulle vara kul att få reda på varför det blir så?
Och om det kan uppstå några andra problem? Förutom att service mysql status/stop/start/restart verkar köras på en annan process.

_________________
https://zampeslinux.se


10 maj 2017, 18:37
Profil WWW
Serveradmin
Användarvisningsbild

Blev medlem: 22 okt 2006, 09:13
Inlägg: 3667
Ort: Svedala
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg Re: Mysql script problem
sampe90 skrev:
Denna fungerar.

Bra!
sampe90 skrev:
Men det blev inte helt som jag tänkte i börja.
Om jag förstått detta rätt så när crontab kör
Kod:
/etc/init.d/mysql status
så loggar den in på mysql server med den info som finns under /etc/mysql/debian.cnf och visar samma typ av status info som om du logga in i mysql och skriver
Kod:
mysql> status


Hhhmm, var har du fått det ifrån? Det är nämligen inte alls så. Tittar du i koden för /etc/initd.mysql så står det bl.a:
Kod:
# Usage: boolean mysqld_status [check_alive|check_dead] [warn|nowarn]
mysqld_status () {
    ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? ))

    ps_alive=0
    pidfile=`mysqld_get_param pid-file`
    if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi
   
    if [ "$1" = "check_alive"  -a  $ping_alive = 1 ] ||
       [ "$1" = "check_dead"   -a  $ping_alive = 0  -a  $ps_alive = 0 ]; then
        return 0 # EXIT_SUCCESS
    else
        if [ "$2" = "warn" ]; then
            echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug
        fi
        return 1 # EXIT_FAILURE
    fi
}


Alltså inget som gör en mysql inloggning. Det är bara lite scriptning för att ta reda på vilket process ID som mysql har.

sampe90 skrev:
Jag märkte också att nu när jag kör htop så visas mysql processerna lite annorlunda.
Förr stod det bara /usr/sbin/mysqld under Command.
Och nu står det
Kod:
/usr/sbin/mysqld --basdir=/usr --datadir=/var/lib/mysql --plugins=/usr/lib/mysql/plugin --user=mysql --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306

Det är inget problem för mig. Men det skulle vara kul att få reda på varför det blir så?

Det är bara en konsekvens av att htop har uppgraderats och förbättrats över tid.
sampe90 skrev:
Och om det kan uppstå några andra problem? Förutom att service mysql status/stop/start/restart verkar köras på en annan process.

Hhhmm, förstår inte riktigt vad du menar?


11 maj 2017, 12:49
Profil WWW
Serveradmin
Användarvisningsbild

Blev medlem: 22 okt 2006, 09:13
Inlägg: 3667
Ort: Svedala
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg Re: Mysql script problem
Och förresten; varför gör du det här ens? En mysql server skall inte gå ner så ofta att du skall behöva knåpa ihop ett script för att starta den igen... Det antyder att det finns andra fel att jobba med.


11 maj 2017, 12:59
Profil WWW

Blev medlem: 17 jan 2011, 17:12
Inlägg: 12
OS: Annat GNU/Linux
Svara med citat
Inlägg Re: Mysql script problem
johanre skrev:
sampe90 skrev:
Men det blev inte helt som jag tänkte i börja.
Om jag förstått detta rätt så när crontab kör
Kod:
/etc/init.d/mysql status
så loggar den in på mysql server med den info som finns under /etc/mysql/debian.cnf och visar samma typ av status info som om du logga in i mysql och skriver
Kod:
mysql> status


Hhhmm, var har du fått det ifrån? Det är nämligen inte alls så. Tittar du i koden för /etc/initd.mysql så står det bl.a:
Kod:
# Usage: boolean mysqld_status [check_alive|check_dead] [warn|nowarn]
mysqld_status () {
    ping_output=`$MYADMIN ping 2>&1`; ping_alive=$(( ! $? ))

    ps_alive=0
    pidfile=`mysqld_get_param pid-file`
    if [ -f "$pidfile" ] && ps `cat $pidfile` >/dev/null 2>&1; then ps_alive=1; fi
   
    if [ "$1" = "check_alive"  -a  $ping_alive = 1 ] ||
       [ "$1" = "check_dead"   -a  $ping_alive = 0  -a  $ps_alive = 0 ]; then
        return 0 # EXIT_SUCCESS
    else
        if [ "$2" = "warn" ]; then
            echo -e "$ps_alive processes alive and '$MYADMIN ping' resulted in\n$ping_output\n" | $ERR_LOGGER -p daemon.debug
        fi
        return 1 # EXIT_FAILURE
    fi
}


Alltså inget som gör en mysql inloggning. Det är bara lite scriptning för att ta reda på vilket process ID som mysql har.

Du får ursäkta mig. Jag försöker bara förstå mig på hur det fungerar.
Är fortfarande lite ny till hur bash scripts fungerar.

Detta är bara en tillfällig script som jag kör tills jag kan lista ut varför mysql-servern kraschar mitt på natten ibland.

_________________
https://zampeslinux.se


12 maj 2017, 18:26
Profil WWW
Serveradmin
Användarvisningsbild

Blev medlem: 22 okt 2006, 09:13
Inlägg: 3667
Ort: Svedala
OS: Ubuntu
Utgåva: 18.04 Bionic Beaver LTS
Svara med citat
Inlägg Re: Mysql script problem
sampe90 skrev:
Du får ursäkta mig. Jag försöker bara förstå mig på hur det fungerar.
Är fortfarande lite ny till hur bash scripts fungerar.

Detta är bara en tillfällig script som jag kör tills jag kan lista ut varför mysql-servern kraschar mitt på natten ibland.

Absolut inga problem! Att lära sig nytt kräver tid och lite tankefel :-)


13 maj 2017, 12:57
Profil WWW
Visa inlägg nyare än:  Sortera efter  
Svara på tråd   [ 11 inlägg ] 

Vilka är online

Användare som besöker denna kategori: Inga registrerade användare och 7 gäster


Du kan inte skapa nya trådar i denna kategori
Du kan inte svara på trådar i denna kategori
Du kan inte redigera dina inlägg i denna kategori
Du kan inte ta bort dina inlägg i denna kategori
Du kan inte bifoga filer i denna kategori

Sök efter:
Hoppa till:  
Main Engineer for phpBB3: Bertie at phpBB.com © 2000 - 2002, 2005 - 2007, the Group behind the Open Source code of phpBB.
Designed by STSoftware, modified by Katt, Konservburk & Peetra. Swedish translation by Peetra & phpBB Sweden © 2006-2011