{"id":613,"date":"2024-08-16T12:07:10","date_gmt":"2024-08-16T04:07:10","guid":{"rendered":"http:\/\/120.55.184.7\/?p=613"},"modified":"2025-05-10T09:08:57","modified_gmt":"2025-05-10T01:08:57","slug":"supervisor%e8%af%a6%e8%a7%a3%ef%bc%9alinux%e8%bf%9b%e7%a8%8b%e7%ae%a1%e7%90%86%e7%9a%84%e7%bb%88%e6%9e%81%e5%88%a9%e5%99%a8","status":"publish","type":"post","link":"https:\/\/beijian99.top\/?p=613","title":{"rendered":"Supervisor\u8be6\u89e3\uff1aLinux\u8fdb\u7a0b\u7ba1\u7406\u7684\u7ec8\u6781\u5229\u5668"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"274\" src=\"https:\/\/beijian99.top\/wp-content\/uploads\/2024\/08\/image-1024x274.png\" alt=\"\" class=\"wp-image-985\" srcset=\"https:\/\/beijian99.top\/wp-content\/uploads\/2024\/08\/image-1024x274.png 1024w, https:\/\/beijian99.top\/wp-content\/uploads\/2024\/08\/image-300x80.png 300w, https:\/\/beijian99.top\/wp-content\/uploads\/2024\/08\/image-768x206.png 768w, https:\/\/beijian99.top\/wp-content\/uploads\/2024\/08\/image.png 1393w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Supervisor\u662f\u4e00\u4e2a\u7528Python\u5f00\u53d1\u7684\u8fdb\u7a0b\u7ba1\u7406\u5de5\u5177\uff0c\u80fd\u591f\u5c06\u666e\u901a\u547d\u4ee4\u884c\u8fdb\u7a0b\u8f6c\u53d8\u4e3a\u540e\u53f0\u5b88\u62a4\u8fdb\u7a0b\uff0c\u5e76\u76d1\u63a7\u8fdb\u7a0b\u72b6\u6001\uff0c\u5728\u5f02\u5e38\u9000\u51fa\u65f6\u81ea\u52a8\u91cd\u542f\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e00\u3001Supervisor\u6838\u5fc3\u7279\u6027<\/h2>\n\n\n\n<p>Supervisor\u5177\u6709\u4ee5\u4e0b\u663e\u8457\u7279\u70b9\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7b80\u5355\u6613\u7528<\/strong>\uff1a\u901a\u8fc7\u7b80\u5355\u7684INI\u98ce\u683c\u914d\u7f6e\u6587\u4ef6\u8fdb\u884c\u914d\u7f6e\uff0c\u652f\u6301\u81ea\u52a8\u91cd\u542f\u5931\u8d25\u8fdb\u7a0b\u548c\u81ea\u52a8\u65e5\u5fd7\u8f6e\u6362<\/li>\n\n\n\n<li><strong>\u96c6\u4e2d\u7ba1\u7406<\/strong>\uff1a\u63d0\u4f9b\u7edf\u4e00\u754c\u9762\u7ba1\u7406\u591a\u4e2a\u8fdb\u7a0b\uff0c\u652f\u6301\u672c\u5730\/\u8fdc\u7a0b\u547d\u4ee4\u548cWeb\u754c\u9762\u63a7\u5236<\/li>\n\n\n\n<li><strong>\u9ad8\u6548\u7a33\u5b9a<\/strong>\uff1a\u91c7\u7528fork\/exec\u673a\u5236\u542f\u52a8\u5b50\u8fdb\u7a0b\uff0c\u64cd\u4f5c\u7cfb\u7edf\u4f1a\u7acb\u5373\u5411Supervisor\u53d1\u9001\u8fdb\u7a0b\u7ec8\u6b62\u4fe1\u53f7<\/li>\n\n\n\n<li><strong>\u53ef\u6269\u5c55\u6027<\/strong>\uff1a\u63d0\u4f9b\u4e8b\u4ef6\u901a\u77e5\u534f\u8bae\u548cXML-RPC\u63a5\u53e3\uff0cPython\u5f00\u53d1\u8005\u53ef\u8f7b\u677e\u6269\u5c55\u529f\u80fd<\/li>\n\n\n\n<li><strong>\u8de8\u5e73\u53f0<\/strong>\uff1a\u652f\u6301\u5927\u591a\u6570\u7c7bUnix\u7cfb\u7edf\uff08Linux\u3001Mac OS X\u3001Solaris\u3001FreeBSD\u7b49\uff09<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e8c\u3001Supervisor\u6838\u5fc3\u7ec4\u4ef6<\/h2>\n\n\n\n<p>Supervisor\u7cfb\u7edf\u7531\u4ee5\u4e0b\u51e0\u4e2a\u6838\u5fc3\u7ec4\u4ef6\u6784\u6210\uff1a<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>supervisord<\/strong>\uff1a\u670d\u52a1\u7aef\u4e3b\u8fdb\u7a0b\uff0c\u8d1f\u8d23\u542f\u52a8\u5b50\u8fdb\u7a0b\u3001\u54cd\u5e94\u5ba2\u6237\u7aef\u547d\u4ee4\u3001\u8bb0\u5f55\u65e5\u5fd7\u7b49<\/li>\n\n\n\n<li><strong>supervisorctl<\/strong>\uff1a\u547d\u4ee4\u884c\u5ba2\u6237\u7aef\uff0c\u63d0\u4f9b\u7c7b\u4f3cshell\u7684\u63a5\u53e3\u7ba1\u7406\u8fdb\u7a0b<\/li>\n\n\n\n<li><strong>Web\u754c\u9762<\/strong>\uff1a\u901a\u8fc7\u914d\u7f6einet_http_server\u540e\uff0c\u53ef\u901a\u8fc7\u6d4f\u89c8\u5668\u8bbf\u95ee\u7ba1\u7406\u754c\u9762<\/li>\n\n\n\n<li><strong>XML-RPC\u63a5\u53e3<\/strong>\uff1a\u4e3aWeb UI\u63d0\u4f9b\u670d\u52a1\u7684\u540c\u4e00HTTP\u670d\u52a1\u5668\u63d0\u4f9b\u7684\u7f16\u7a0b\u63a5\u53e3<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e09\u3001\u5b89\u88c5Supervisor<\/h2>\n\n\n\n<p>Supervisor\u53ef\u901a\u8fc7\u591a\u79cd\u65b9\u5f0f\u5b89\u88c5\uff1a<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u57fa\u4e8eDebian\/Ubuntu\u7cfb\u7edf<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo apt-get update\nsudo apt-get install supervisor\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u57fa\u4e8eRPM\u7684\u7cfb\u7edf(CentOS\/Fedora)<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsudo yum install supervisor\n# \u6216\nsudo dnf install supervisor\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u4f7f\u7528pip\u5b89\u88c5<\/h3>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\npip install supervisor\n<\/pre><\/div>\n\n\n<p>\u5b89\u88c5\u5b8c\u6210\u540e\uff0c\u7cfb\u7edf\u4f1a\u751f\u6210\u4ee5\u4e0b\u5173\u952e\u6587\u4ef6\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>\/etc\/supervisord.conf<\/code>\uff1a\u4e3b\u914d\u7f6e\u6587\u4ef6<\/li>\n\n\n\n<li><code>\/etc\/supervisord.d\/<\/code>\uff1a\u5b50\u914d\u7f6e\u6587\u4ef6\u76ee\u5f55<\/li>\n\n\n\n<li><code>\/usr\/bin\/supervisord<\/code>\uff1a\u670d\u52a1\u7aef\u7a0b\u5e8f<\/li>\n\n\n\n<li><code>\/usr\/bin\/supervisorctl<\/code>\uff1a\u5ba2\u6237\u7aef\u7a0b\u5e8f<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">\u56db\u3001\u914d\u7f6e\u8be6\u89e3<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u4e3b\u914d\u7f6e\u6587\u4ef6<\/h3>\n\n\n\n<p>\u751f\u6210\u9ed8\u8ba4\u914d\u7f6e\u6587\u4ef6\u6a21\u677f\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\necho_supervisord_conf &gt; \/etc\/supervisord.conf\n<\/pre><\/div>\n\n\n<p>\u4e3b\u914d\u7f6e\u6587\u4ef6\u4e3b\u8981\u5305\u542b\u4ee5\u4e0b\u90e8\u5206\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;unix_http_server]\nfile=\/tmp\/supervisor.sock   ; UNIX socket\u6587\u4ef6\u8def\u5f84\nchmod=0700                 ; socket\u6587\u4ef6\u6743\u9650\n\n&#x5B;inet_http_server]         ; Web\u7ba1\u7406\u754c\u9762\u914d\u7f6e\nport=127.0.0.1:9001       ; \u76d1\u542cIP\u548c\u7aef\u53e3\nusername=user             ; \u767b\u5f55\u7528\u6237\u540d\npassword=123              ; \u767b\u5f55\u5bc6\u7801\n<\/pre><\/div>\n\n<p>[supervisord]<\/p>\n\n\n\n<p>logfile=\/tmp\/supervisord.log ; \u65e5\u5fd7\u6587\u4ef6\u8def\u5f84 logfile_maxbytes=50MB ; \u65e5\u5fd7\u6587\u4ef6\u6700\u5927\u5927\u5c0f logfile_backups=10 ; \u4fdd\u7559\u7684\u65e5\u5fd7\u5907\u4efd\u6570\u91cf loglevel=info ; \u65e5\u5fd7\u7ea7\u522b pidfile=\/tmp\/supervisord.pid ; PID\u6587\u4ef6\u8def\u5f84 nodaemon=false ; \u662f\u5426\u4ee5\u5b88\u62a4\u8fdb\u7a0b\u65b9\u5f0f\u8fd0\u884c<\/p>\n\n\n<p>[supervisorctl]<\/p>\n\n\n\n<p>serverurl=unix:\/\/\/tmp\/supervisor.sock ; \u8fde\u63a5supervisord\u7684URL<\/p>\n\n\n<p>[include]<\/p>\n\n\n\n<p>files = supervisord.d\/*.conf ; \u5305\u542b\u7684\u5b50\u914d\u7f6e\u6587\u4ef6<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u7a0b\u5e8f\u914d\u7f6e<\/h3>\n\n\n\n<p>\u5728<code>\/etc\/supervisord.d\/<\/code>\u76ee\u5f55\u4e0b\u4e3a\u6bcf\u4e2a\u7a0b\u5e8f\u521b\u5efa\u5355\u72ec\u7684\u914d\u7f6e\u6587\u4ef6\uff0c\u4f8b\u5982<code>myapp.conf<\/code>\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;program:myapp]\ncommand=\/path\/to\/your\/program ; \u8981\u6267\u884c\u7684\u547d\u4ee4\ndirectory=\/path\/to\/working\/directory ; \u5de5\u4f5c\u76ee\u5f55\nuser=myuser                  ; \u8fd0\u884c\u7528\u6237\nautostart=true               ; \u662f\u5426\u81ea\u52a8\u542f\u52a8\nautorestart=true             ; \u662f\u5426\u81ea\u52a8\u91cd\u542f\nstderr_logfile=\/var\/log\/myapp.err.log ; \u9519\u8bef\u65e5\u5fd7\nstdout_logfile=\/var\/log\/myapp.out.log ; \u8f93\u51fa\u65e5\u5fd7\nstartsecs=10                 ; \u542f\u52a8\u540e\u7a33\u5b9a\u8fd0\u884c\u65f6\u95f4\nstartretries=3               ; \u542f\u52a8\u5931\u8d25\u91cd\u8bd5\u6b21\u6570\nenvironment=KEY=&quot;value&quot;      ; \u73af\u5883\u53d8\u91cf\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">\u4e94\u3001\u5e38\u7528\u64cd\u4f5c\u547d\u4ee4<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u542f\u52a8supervisord\u670d\u52a1<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsupervisord -c \/etc\/supervisord.conf\n<\/pre><\/div>\n\n\n<ol start=\"2\" class=\"wp-block-list\">\n<li><strong>\u91cd\u65b0\u52a0\u8f7d\u914d\u7f6e<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsupervisorctl reread\nsupervisorctl update\n<\/pre><\/div>\n\n\n<ol start=\"3\" class=\"wp-block-list\">\n<li><strong>\u7ba1\u7406\u5355\u4e2a\u7a0b\u5e8f<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsupervisorctl start myapp    # \u542f\u52a8\nsupervisorctl stop myapp     # \u505c\u6b62\nsupervisorctl restart myapp  # \u91cd\u542f\nsupervisorctl status myapp   # \u67e5\u770b\u72b6\u6001\n<\/pre><\/div>\n\n\n<ol start=\"4\" class=\"wp-block-list\">\n<li><strong>\u7ba1\u7406\u6240\u6709\u7a0b\u5e8f<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsupervisorctl start all\nsupervisorctl stop all\nsupervisorctl restart all\n<\/pre><\/div>\n\n\n<ol start=\"5\" class=\"wp-block-list\">\n<li><strong>\u67e5\u770b\u65e5\u5fd7<\/strong>\uff1a<\/li>\n<\/ol>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\ntail -f \/var\/log\/myapp.out.log\n<\/pre><\/div>\n\n\n<h2 class=\"wp-block-heading\">\u516d\u3001\u9ad8\u7ea7\u529f\u80fd<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">\u8fdb\u7a0b\u7ec4\u7ba1\u7406<\/h3>\n\n\n\n<p>Supervisor\u652f\u6301\u5c06\u76f8\u5173\u7a0b\u5e8f\u5206\u7ec4\u7ba1\u7406\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;group:apps]\nprograms=app1,app2,app3\n<\/pre><\/div>\n\n<p>[program:app1]<\/p>\n\n\n\n<p>command=\/usr\/bin\/python3 app1.py<\/p>\n\n\n<p>[program:app2]<\/p>\n\n\n\n<p>command=\/usr\/bin\/python3 app2.py<\/p>\n\n\n<p>[program:app3]<\/p>\n\n\n\n<p>command=\/usr\/bin\/python3 app3.py<\/p>\n\n\n\n<p>\u64cd\u4f5c\u6574\u4e2a\u7ec4\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nsupervisorctl start apps:*\nsupervisorctl stop apps:*\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u65e5\u5fd7\u8f6e\u8f6c<\/h3>\n\n\n\n<p>\u914d\u7f6e\u65e5\u5fd7\u81ea\u52a8\u8f6e\u8f6c\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;program:myapp]\nstdout_logfile=\/var\/log\/myapp.log\nstdout_logfile_maxbytes=50MB  ; \u65e5\u5fd7\u6587\u4ef6\u6700\u5927\u5927\u5c0f\nstdout_logfile_backups=10     ; \u4fdd\u7559\u7684\u5907\u4efd\u6570\u91cf\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">\u76d1\u63a7\u62a5\u8b66<\/h3>\n\n\n\n<p>\u914d\u7f6eeventlistener\u5b9e\u73b0\u5f02\u5e38\u62a5\u8b66\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;eventlistener:crash_alert]\ncommand=python3 alert.py\nevents=PROCESS_STATE_EXITED\n<\/pre><\/div>\n\n\n<p>alert.py\u793a\u4f8b\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nimport sys\nimport requests\n\ndef alert(msg):\n    # \u53d1\u9001\u62a5\u8b66\u901a\u77e5\n    url = &quot;https:\/\/your-webhook-url&quot;\n    requests.post(url, json={&quot;text&quot;: msg})\n\nwhile True:\n    headers = sys.stdin.readline()\n    payload = sys.stdin.readline()\n    sys.stdout.write(&quot;READY\\n&quot;)\n    sys.stdout.flush()\n    if &quot;PROCESS_STATE_EXITED&quot; in payload:\n        alert(&quot;\u7a0b\u5e8f\u6302\u4e86!!!&quot;)\n<\/pre><\/div>\n\n\n<h3 class=\"wp-block-heading\">Docker\u5bb9\u5668\u4e2d\u4f7f\u7528<\/h3>\n\n\n\n<p>\u5728Docker\u5bb9\u5668\u4e2d\u7ba1\u7406\u591a\u4e2a\u670d\u52a1\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\nFROM php:7.4.33-fpm\nRUN apt-get update &amp;amp;&amp;amp; apt-get install -y supervisor nginx cron\nCOPY supervisord.conf \/etc\/supervisor\/conf.d\/\nCMD &#x5B;&quot;\/usr\/bin\/supervisord&quot;, &quot;-c&quot;, &quot;\/etc\/supervisor\/supervisord.conf&quot;]\n<\/pre><\/div>\n\n\n<p>supervisord.conf\u793a\u4f8b\uff1a<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: plain; title: ; notranslate\" title=\"\">\n&#x5B;supervisord]\nnodaemon=true  ; \u5bb9\u5668\u4e2d\u9700\u8981\u524d\u53f0\u8fd0\u884c\n<\/pre><\/div>\n\n<p>[program:php-fpm]<\/p>\n\n\n\n<p>command=php-fpm autostart=true autorestart=true<\/p>\n\n\n<p>[program:nginx]<\/p>\n\n\n\n<p>command=nginx -g &#8216;daemon off;&#8217; autostart=true autorestart=true<\/p>\n\n\n<p>[program:cron]<\/p>\n\n\n\n<p>command=cron -f ; cron\u9700\u8981-f\u53c2\u6570\u4fdd\u6301\u524d\u53f0\u8fd0\u884c autostart=true autorestart=true<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u4e03\u3001\u5e38\u89c1\u95ee\u9898\u89e3\u51b3<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u7a0b\u5e8f\u65e0\u6cd5\u81ea\u52a8\u91cd\u542f<\/strong>\uff1a\u68c0\u67e5<code>autorestart<\/code>\u914d\u7f6e\u662f\u5426\u4e3atrue<\/li>\n\n\n\n<li><strong>\u6743\u9650\u95ee\u9898<\/strong>\uff1a\u786e\u4fdd\u8fd0\u884c\u7528\u6237\u6709\u6267\u884c\u7a0b\u5e8f\u7684\u6743\u9650<\/li>\n\n\n\n<li><strong>\u65e5\u5fd7\u6587\u4ef6\u4e0d\u751f\u6210<\/strong>\uff1a\u68c0\u67e5\u65e5\u5fd7\u6587\u4ef6\u8def\u5f84\u662f\u5426\u6709\u5199\u5165\u6743\u9650<\/li>\n\n\n\n<li><strong>\u914d\u7f6e\u4fee\u6539\u4e0d\u751f\u6548<\/strong>\uff1a\u4fee\u6539\u914d\u7f6e\u540e\u9700\u8981\u6267\u884c<code>supervisorctl update<\/code><\/li>\n\n\n\n<li><strong>Web\u754c\u9762\u65e0\u6cd5\u8bbf\u95ee<\/strong>\uff1a\u68c0\u67e5<code>[inet_http_server]<\/code>\u914d\u7f6e\u548c\u9632\u706b\u5899\u8bbe\u7f6e<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">\u516b\u3001\u603b\u7ed3<\/h2>\n\n\n\n<p>Supervisor\u4f5c\u4e3a\u4e00\u6b3e\u5f3a\u5927\u7684\u8fdb\u7a0b\u7ba1\u7406\u5de5\u5177\uff0c\u5177\u6709\u914d\u7f6e\u7b80\u5355\u3001\u529f\u80fd\u5168\u9762\u3001\u7a33\u5b9a\u6027\u9ad8\u7b49\u7279\u70b9\uff0c\u7279\u522b\u9002\u5408\u7ba1\u7406\u751f\u4ea7\u73af\u5883\u4e2d\u7684\u5173\u952e\u670d\u52a1\u8fdb\u7a0b\u3002\u5408\u7406\u4f7f\u7528Supervisor\u53ef\u4ee5\u663e\u8457\u63d0\u9ad8\u670d\u52a1\u7684\u7a33\u5b9a\u6027\u548c\u53ef\u9760\u6027\uff0c\u51cf\u5c11\u8fd0\u7ef4\u5de5\u4f5c\u91cf\u3002<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Supervisor\u662f\u4e00\u4e2a\u7528Python\u5f00\u53d1\u7684\u8fdb\u7a0b\u7ba1\u7406\u5de5\u5177\uff0c\u80fd\u591f\u5c06\u666e\u901a\u547d\u4ee4\u884c\u8fdb\u7a0b\u8f6c\u53d8\u4e3a\u540e\u53f0\u5b88\u62a4\u8fdb\u7a0b\uff0c\u5e76\u76d1\u63a7\u8fdb\u7a0b [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":985,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[127],"tags":[158],"class_list":["post-613","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ci-cd","tag-supervisor"],"_links":{"self":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/613","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=613"}],"version-history":[{"count":3,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/613\/revisions"}],"predecessor-version":[{"id":986,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/posts\/613\/revisions\/986"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=\/wp\/v2\/media\/985"}],"wp:attachment":[{"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beijian99.top\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}