{"id":1552,"date":"2021-10-24T01:47:58","date_gmt":"2021-10-23T17:47:58","guid":{"rendered":"https:\/\/www.siediyer.cn\/?p=1552"},"modified":"2021-10-24T01:47:58","modified_gmt":"2021-10-23T17:47:58","slug":"shell%e8%84%9a%e6%9c%ac%e5%ae%9e%e7%8e%b0linux%e9%94%99%e8%af%af%e6%97%a5%e5%bf%97%e7%9b%91%e6%8e%a7%e5%91%8a%e8%ad%a6","status":"publish","type":"post","link":"https:\/\/www.siediyer.cn\/?p=1552","title":{"rendered":"Shell\u811a\u672c\u5b9e\u73b0Linux\u9519\u8bef\u65e5\u5fd7\u76d1\u63a7\u544a\u8b66"},"content":{"rendered":"<p>\u524d\u6587\u6709\u8bb2\u5230\uff0c\u6700\u8fd1\u90e8\u7f72\u4e86\u4e00\u4e2a\u670d\u52a1<br \/>\n\u4f46\u662f\u8001\u662f\u88ab\u6076\u610f\u7684\u626b\u63cf<br \/>\n\u867d\u7136\u5229\u7528nginx\u7981\u6b62\u4e86\u4e9bIP<br \/>\n\u4f46\u6211\u8fd8\u662f\u60f3\u5728\u88ab\u6076\u610f\u626b\u63cf\u65f6\u5019\u6536\u5230\u4e00\u4e2a\u901a\u77e5\u4fe1\u606f<br \/>\n\u8ba9\u6211\u80fd\u77e5\u9053\u6211\u7684\u670d\u52a1\u5668\u53c8\u88ab\u8bbf\u95ee\u4e86<br \/>\n\u4e8e\u662f\u4e4e\uff0c\u5c31\u6709\u4e86\u8fd9\u7bc7\u6587\u7ae0<\/p>\n<p>\u6b64\u6587\u76ee\u7684\u662f\u4e3a\u4e86\u8bb0\u5f55\u81ea\u5df1\u7684\u64cd\u4f5c\u6b65\u9aa4<br \/>\n\u65e2\u7ed9\u81ea\u5df1\u4e00\u4e2a\u590d\u4e60\u7684\u673a\u4f1a\uff0c\u540c\u65f6\u4e5f\u80fd\u670d\u52a1\u770b\u5230\u6b64\u6587\u7684\u8bfb\u8005<br \/>\n\u597d\u4e86\uff0c\u8bdd\u4e0d\u591a\u8bf4<br \/>\n\u63a5\u4e0b\u6765\u5f00\u59cb\u6b63\u6587\u5185\u5bb9<\/p>\n<hr \/>\n<p>\u6574\u4f53\u7684\u601d\u8def\u5982\u4e0b\uff1a<\/p>\n<ol>\n<li>\u65e2\u7136\u662f\u76d1\u63a7\uff0c\u6bd4\u8f83\u65b9\u4fbf\u7684\u65b9\u5f0f\u5c31\u662f\u5229\u7528Linux\u7684cron\u5b9a\u65f6\u4efb\u52a1\u6765\u5b9a\u65f6\u53bb\u6267\u884c\u4e00\u4e2a\u64cd\u4f5c<\/li>\n<li>\u65e2\u7136\u662f\u8981\u80fd\u88ab\u5b9a\u65f6\u4efb\u52a1\u6267\u884c\u7684\u64cd\u4f5c\uff0c\u90a3\u4e48\u6211\u4eec\u5c31\u9700\u8981\u5199\u4e00\u4e2ashell\u811a\u672c<\/li>\n<li>shell\u811a\u672c\u9700\u8981\u505a\u4ec0\u4e48\u5462\uff1f\u6211\u4eec\u53ef\u4ee5\u53bb\u5339\u914d\u67d0\u4e2a\u65f6\u95f4\u6bb5\uff0c\u5728\u65f6\u95f4\u6bb5\u5185\u662f\u5426\u6709\u65b0\u7684\u5185\u5bb9\u6dfb\u52a0\u8fdb\u53bb\uff08\u65e5\u5fd7\u6587\u4ef6\u80af\u5b9a\u6709\u8bb0\u5f55\u65f6\u95f4\u7684\uff09\uff0c\u5982\u679c\u6709\u7684\u8bdd\uff0c\u5219\u628a\u8fd9\u6bb5\u5185\u5bb9\u5355\u72ec\u53d6\u51fa\u6765\uff0c\u5e76\u53d1\u9001\u90ae\u4ef6\u901a\u77e5<\/li>\n<li>\u4e0a\u9762\u53c8\u6d89\u53ca\u5230\u4e86\u53d1\u90ae\u4ef6\uff0c\u53d1\u90ae\u4ef6\u6bd4\u8f83\u597d\u7684\u65b9\u5f0f\u662f\u5199\u4e2aPython\u811a\u672c\uff08\u56e0\u4e3a\u6211\u7684\u670d\u52a1\u5668\u81ea\u5e26\u4e86python\u73af\u5883\uff0c\u800c\u4e14python\u8fd0\u884c\u8d77\u6765\u4e5f\u7b80\u5355\uff09<\/li>\n<li>\u6240\u4ee5\uff0c\u603b\u7ed3\u4e0b\u6765\u6211\u4eec\u9700\u8981\u4e24\u4e2a\u6587\u4ef6\uff08\u5047\u5b9a\u90fd\u5b58\u653e\u5728\/opt\/mysh\/\u76ee\u5f55\uff09\uff1a\u4e00\u4e2a\u662f\u53ef\u6267\u884c\u7684shell\u811a\u672c\uff1b\u4e00\u4e2a\u662f\u53d1\u90ae\u4ef6\u7684python\u811a\u672c\u6587\u4ef6\u3002\u5e76\u8bbe\u5b9a\u4e00\u4e2acron\u5b9a\u65f6\u4efb\u52a1\u3002<\/li>\n<\/ol>\n<h6 id=\"\u63a5\u4e0b\u6765\u5c31\u662f\u5f00\u59cb\u5199\u4e2ashell\u811a\u672c\uff0c\u5982\u4e0b-\u6587\u4ef6\u540d\uff1amonitor-nginx-log-sh-\uff1a\">\u63a5\u4e0b\u6765\u5c31\u662f\u5f00\u59cb\u5199\u4e2ashell\u811a\u672c\uff0c\u5982\u4e0b(\u6587\u4ef6\u540d\uff1amonitor_nginx_log.sh)\uff1a<\/h6>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\">#!\/bin\/bash\r\n#\u65e5\u5fd7\u6587\u4ef6\u8def\u5f84\r\nlogfile=\/var\/log\/nginx\r\n\r\n#\u5f53\u5929\u65e5\u671f,\u5e74\u6708\u65e5\r\ncur_date=`date +\"%Y\/%m\/%d\"`\r\n\r\n#\u5f00\u59cb\u65f6\u95f4\uff083\u5206\u949f\u524d\uff09,\u65f6\u5206\u79d2\r\nstart_time=`date -d\"3 minutes ago\" +\"%H:%M:%S\"`\r\n\r\n#\u7ed3\u675f\u65f6\u95f4,\u65f6\u5206\u79d2\r\nstop_time=`date +\"%H:%M:%S\"`\r\n\r\n#\u628a\u65b0\u589e\u7684\u9519\u8bef\u65e5\u5fd7\u5199\u5230new_error_log\u4e2d\r\ntac $logfile\/error.log | awk -v st=\"$start_time\" -v et=\"$stop_time\" -v dt=\"$cur_date\" '{t=$2;t1=$1; if(dt==t1 &amp;&amp; t&gt;=st &amp;&amp; t&lt;=et) {print $0}}' &gt; $logfile\/new_error_log.txt\r\n\r\nfile_size=`du $logfile\/new_error_log.txt | awk '{print $1}'`\r\n\r\n#new_error_log\u6587\u4ef6\u5927\u5c0f\u4e0d\u4e3a0\uff0c\u53d1\u9001\u90ae\u4ef6\u901a\u77e5\r\nif [[ $file_size -gt 0 ]];then\r\n  echo `date +'%Y\/%m\/%d %H:%M:%S'`\" there are new errors in nginx error.log\" | cat &gt;&gt; \/opt\/mysh\/monitor.log\r\n  \/usr\/bin\/python2.7 \/opt\/mysh\/send_mail.py | tee -a \/opt\/mysh\/monitor.log\r\nfi<\/pre>\n<p>ps: \u4e0a\u9762\u7684\u811a\u672c\u6709\u597d\u51e0\u4e2a\u547d\u4ee4\uff0c\u5982\u679c\u6709\u7591\u95ee\u7684\u8bdd\uff0c\u8bf7\u5f80\u4e0b\u770b\uff0c\u4f1a\u6709\u89e3\u91ca\u7684<\/p>\n<h6 id=\"\u7136\u540e\u5462\uff0c\u6211\u4eec\u8fd8\u8981\u6709\u4e00\u4e2a\u90ae\u4ef6\u53d1\u9001\u811a\u672c\uff08send-mail-py\uff09\uff0c\u5982\u4e0b\uff1a\">\u7136\u540e\u5462\uff0c\u6211\u4eec\u8fd8\u8981\u6709\u4e00\u4e2a\u90ae\u4ef6\u53d1\u9001\u811a\u672c\uff08send_mail.py\uff09\uff0c\u5982\u4e0b\uff1a<\/h6>\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\"># -*- coding: utf-8 -*-\r\nimport os\r\nimport smtplib\r\nfrom email.header import Header\r\nfrom email.mime.application import MIMEApplication\r\nfrom email.mime.multipart import MIMEMultipart\r\nfrom email.mime.text import MIMEText\r\nfrom email.utils import parseaddr, formataddr\r\n\r\ndef _format_addr(s):\r\n    name, addr = parseaddr(s)\r\n    return formataddr((Header(name, 'utf-8').encode(), addr))\r\n\r\n# \u90ae\u7bb1\u5b9a\u4e49\r\nsmtp_server = 'smtp.163.com'\r\nsmtp_port = 25\r\nfrom_addr = 'from_addr@163.com'\r\npassword = os.environ.get('MAIL_PASSWD')\r\nto_addr = 'to_addr@163.com'\r\n\r\n# \u90ae\u4ef6\u5bf9\u8c61\r\nmsg = MIMEMultipart()\r\nmsg['From'] = _format_addr('\u53d1\u4ef6\u4eba &lt;%s&gt;' % from_addr)\r\nmsg['To'] = _format_addr('\u6536\u4ef6\u4eba &lt;%s&gt;' % to_addr)\r\nmsg['Subject'] = Header('\u3010Support\u3011\u53d1\u73b0\u9519\u8bef', 'utf-8').encode()\r\n\r\n# \u90ae\u4ef6\u6b63\u6587\u662fMIMEText:\r\nhtml = \"&lt;html&gt;&lt;body&gt;&lt;h4&gt;\u68c0\u6d4b\u6709\u9519\u8bef\u53d1\u751f\uff0c\u8be6\u60c5\u89c1\u9644\u4ef6\uff01&lt;\/h4&gt;&lt;\/body&gt;&lt;\/html&gt;\"\r\nmsg.attach(MIMEText(html, 'html', 'utf-8'))\r\n\r\n# \u6dfb\u52a0\u9644\u4ef6\r\nfile_path = \"\/var\/log\/nginx\/new_error_log.txt\"\r\nattachment = MIMEApplication(open(r'file_path', 'rb').read())\r\nattachment.add_header('Content-Disposition', 'attachment', filename=\"new_error_log.txt\")\r\nmsg.attach(attachment)\r\n\r\n# \u53d1\u9001\u90ae\u4ef6\r\nprint('\u5f00\u59cb\u53d1\u9001\u90ae\u4ef6&gt;&gt;&gt;')\r\ntry:\r\n    server = smtplib.SMTP(smtp_server, smtp_port)\r\n    server.login(from_addr, password)\r\n    server.sendmail(from_addr, to_addr, msg.as_string())\r\n    server.quit()\r\nexcept Exception, e:\r\n    print \"\u90ae\u4ef6\u53d1\u9001\u5f02\u5e38\uff1a\" + e\r\nfinally:\r\n    print('\u7ed3\u675f\u90ae\u4ef6\u53d1\u9001&lt;&lt;&lt;')<\/pre>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u524d\u6587\u6709\u8bb2\u5230\uff0c\u6700\u8fd1\u90e8\u7f72\u4e86\u4e00\u4e2a\u670d\u52a1 \u4f46\u662f\u8001\u662f\u88ab\u6076\u610f\u7684\u626b\u63cf \u867d\u7136\u5229\u7528nginx\u7981\u6b62\u4e86\u4e9bIP \u4f46\u6211\u8fd8\u662f\u60f3\u5728\u88ab\u6076\u610f\u626b\u63cf\u65f6 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[111,112],"class_list":["post-1552","post","type-post","status-publish","format-standard","hentry","category-linux","tag-linux","tag-shell"],"_links":{"self":[{"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=\/wp\/v2\/posts\/1552","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1552"}],"version-history":[{"count":1,"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=\/wp\/v2\/posts\/1552\/revisions"}],"predecessor-version":[{"id":1553,"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=\/wp\/v2\/posts\/1552\/revisions\/1553"}],"wp:attachment":[{"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1552"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1552"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.siediyer.cn\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1552"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}