天天看點

Python 系統時間與Mysql時間對比

        由于自己是負責海外項目,常常會遇到一些問題,最近被系統時間與mysql時間不在一個時區,而坑了自己,一般修改了系統時區之後,MySQL必須重新開機,不然MySQL時區是不對的,會導緻資料全部都是錯的~~~,哎,隻有坑到了自己,才會想到要去避免這種事情再次出現,是以用python寫了一個簡單判斷時區的腳本,時區不對并郵件發出來,大家參考參考,詳情如下:

1、腳本執行個體

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

<code>#!/usr/bin/env python</code>

<code># coding=utf8</code>

<code># auther:kuangl</code>

<code># This is system time and sql time diff</code>

<code>from</code>  <code>datetime  </code><code>import</code>  <code>*</code>

<code>import</code> <code>os,sys,socket,fcntl,struct</code>

<code>import</code> <code>MySQLdb</code>

<code>import</code> <code>smtplib</code>

<code>from</code> <code>email.mime.multipart </code><code>import</code> <code>MIMEMultipart</code>

<code>from</code> <code>email.mime.base </code><code>import</code> <code>MIMEBase</code>

<code>from</code> <code>email.mime.text </code><code>import</code> <code>MIMEText</code>

<code>reload</code><code>(sys)</code>

<code>sys.setdefaultencoding(</code><code>'utf8'</code><code>)</code>

<code>'''定義發送郵件函數'''</code>

<code>def</code> <code>sendmail(html,emailaddress,mailSubject,from_address</code><code>=</code><code>"[email protected]"</code><code>):</code>

<code>        </code><code>mail_list</code><code>=</code><code>emailaddress.split(</code><code>","</code><code>)</code>

<code>        </code><code>msg</code><code>=</code><code>MIMEMultipart()</code>

<code>        </code><code>msg[</code><code>'Accept-Language'</code><code>]</code><code>=</code><code>'zh-CN'</code>

<code>        </code><code>msg[</code><code>'Accept-Charset'</code><code>]</code><code>=</code> <code>'ISO-8859-1,utf-8'</code>

<code>        </code><code>msg[</code><code>'From'</code><code>]</code><code>=</code><code>from_address</code>

<code>        </code><code>msg[</code><code>'to'</code><code>]</code><code>=</code><code>";"</code><code>.join(mail_list)</code>

<code>        </code><code>msg[</code><code>'Subject'</code><code>]</code><code>=</code><code>mailSubject.decode(</code><code>"utf-8"</code><code>)</code>

<code>        </code><code>txt</code><code>=</code><code>MIMEText(html,</code><code>'html'</code><code>,</code><code>'utf-8'</code><code>)</code>

<code>        </code><code>txt.set_charset(</code><code>'utf-8'</code><code>)</code>

<code>        </code><code>msg.attach(txt)</code>

<code>        </code><code>smtp</code><code>=</code><code>smtplib.SMTP(</code><code>"mail.test.com"</code><code>)</code>

<code>        </code><code>smtp.sendmail(msg[</code><code>"From"</code><code>],mail_list,msg.as_string())</code>

<code>        </code><code>smtp.close()</code>

<code>'''檢視本機hostname'''</code>

<code>hostname</code><code>=</code><code>socket.gethostname()</code>

<code>print</code> <code>hostname</code>

<code>'''檢視本機IP位址'''</code>

<code>def</code> <code>get_ip_address(ifname):</code>

<code>    </code><code>s</code><code>=</code><code>socket.socket(socket.AF_INET,socket.SOCK_DGRAM)</code>

<code>    </code><code>return</code> <code>socket.inet_ntoa(fcntl.ioctl(</code>

<code>            </code><code>s.fileno(),</code>

<code>            </code><code>0x8915</code><code>,</code>

<code>            </code><code>struct.pack(</code><code>'256s'</code><code>,ifname[:</code><code>15</code><code>])</code>

<code>    </code><code>)[</code><code>20</code><code>:</code><code>24</code><code>])</code>

<code>ip_add </code><code>=</code> <code>get_ip_address(</code><code>'eth0'</code><code>)</code>

<code>print</code> <code>ip_add</code>

<code>'''檢視系統時間'''</code>

<code>nowtime </code><code>=</code> <code>datetime.now()</code>

<code>daytime </code><code>=</code> <code>nowtime.strftime(</code><code>'%Y-%m-%d %H:%M'</code><code>)</code>

<code>print</code> <code>'system time time:'</code><code>, daytime</code>

<code>'''檢視資料庫時間'''</code>

<code>pwd</code><code>=</code><code>'111133334444'</code>

<code>SQL</code><code>=</code><code>'select now()'</code>

<code>def</code> <code>mysql_connect(sql,host):</code>

<code>    </code><code>try</code><code>:</code>

<code>        </code><code>conn</code><code>=</code><code>MySQLdb.connect(host</code><code>=</code><code>'127.0.0.1'</code><code>,user</code><code>=</code><code>'rd'</code><code>,passwd</code><code>=</code><code>pwd,port</code><code>=</code><code>3306</code><code>)</code>

<code>        </code><code>cur</code><code>=</code><code>conn.cursor()</code>

<code>        </code><code>cur.execute(sql)</code>

<code>        </code><code>result</code><code>=</code><code>cur.fetchall()</code>

<code>        </code><code>cur.close()</code>

<code>        </code><code>conn.close()</code>

<code>        </code><code>return</code> <code>result</code>

<code>    </code><code>except</code> <code>MySQLdb.Error,e:</code>

<code>        </code><code>print</code> <code>"Mysql Error %d: %s"</code> <code>%</code> <code>(e.args[</code><code>0</code><code>],e.args[</code><code>1</code><code>])</code>

<code>server_result</code><code>=</code><code>mysql_connect(sql</code><code>=</code><code>SQL,host</code><code>=</code><code>'127.0.0.1'</code><code>)</code>

<code>sql_gettime</code><code>=</code><code>server_result[</code><code>0</code><code>][</code><code>0</code><code>]</code>

<code>SQLTime</code><code>=</code><code>sql_gettime.strftime(</code><code>'%Y-%m-%d %H:%M'</code><code>)</code>

<code>print</code> <code>'SQL server time:'</code><code>,SQLTime</code>

<code>''' 定義郵件參數'''</code>

<code>Content</code><code>=</code> <code>'Dear ALL: &lt;br&gt; &amp;nbsp;&amp;nbsp; '</code> <code>+</code> <code>ip_add </code><code>+</code> <code>' , System and Database time error, &lt;br&gt; &amp;nbsp;&amp;nbsp; System time is : '</code><code>+</code> <code>daytime </code><code>+</code><code>' &lt;br&gt; &amp;nbsp;&amp;nbsp; Database time is : '</code> <code>+</code> <code>SQLTime </code><code>+</code> <code>' &lt;br&gt; &amp;nbsp;&amp;nbsp; Please check all time! &lt;br&gt; &amp;nbsp;&amp;nbsp; &lt;br&gt; &amp;nbsp;&amp;nbsp; Friendly reminder,Please note!'</code>

<code>Subject</code><code>=</code> <code>'[監控][海外時區監控]['</code> <code>+</code> <code>hostname </code><code>+</code> <code>']System and Database time error'</code>

<code>''' 判斷時間是否相等'''</code>

<code>if</code> <code>daytime </code><code>=</code><code>=</code> <code>SQLTime:</code>

<code>    </code><code>print</code> <code>"system and sql time is OK, not sednemail"</code>

<code>else</code><code>:</code>

<code>    </code><code>print</code> <code>"system and sql time is Fail,Start email to all"</code>

<code>    </code><code>sendmail(html</code><code>=</code><code>Content,emailaddress</code><code>=</code><code>'[email protected]'</code><code>,mailSubject</code><code>=</code><code>Subject)</code>

2、測試結果

<a href="http://s3.51cto.com/wyfs02/M01/58/DB/wKiom1S-Z5zRt5mTAADj3H9YT60609.jpg" target="_blank"></a>

本文轉自 kuangling 51CTO部落格,原文連結:http://blog.51cto.com/kling/1606401