为PHP设置服务器(Apache/Nginx)环境变量

设置情状变量多如牛毛的地点为区别开拓意况/分娩条件,或许定义一些数据库的帐号密码

PHP程序的失实发生日常归于于下列多个领域。

Supervisor 是基于 Python 的长河管理工科具,只可以运转在 Unix-Like
的系统上,相当于不可能运维在 Windows 上。Supervisor 官方版近年来只能运转在
Python 2.4 以上版本,然而还不可能运行在 Python 3 上,不过已经有叁个 Python
3 的移植版
supervisor-py3k。

设置Apache景况变量

 语法错误

怎样情形下我们需求经过管理吗?正是实施一些亟需以守护进程格局推行的顺序,比方多个后台职分,作者最常用的是用来运转和保管基于
Tornado 写的 Web 程序。

指令

设置当前蒙受变量为DEV

SetEnv RUNTIME_ENVIROMENT DEV

数据库帐号密码

SetEnv MYSQL_USERNAME root
SetEnv MYSQL_PASSWORD root

语法错误最广泛,何况最轻便修复。举例,疏漏了二个分号,就能够来得错误消息。那类错误会堵住脚本施行。平时发生在先后支付时,能够通过错误报告实行修补,再另行运转。

除了那几个之外,Supervisor
还可以够很谈得来的军管程序在命令行上输出的日志,可以将日志重定向到自定义的日记文件中,仍然是能够按文件大小对日记实行划分。

配置文件格式

<VirtualHost *:80>
    ServerAdmin admin@admin.com
    DocumentRoot "/var/www/"
    ServerName localhost
    SetEnv RUNTIME_ENVIROMENT DEV
    SetEnv MYSQL_USERNAME root
    SetEnv MYSQL_PASSWORD root
    ErrorLog "logs/error.log"
    CustomLog "logs/access.log" common
</VirtualHost>

Ø  运转时不当

Supervisor 有七个重大的组成都部队分:

设置Nginx情况变量

这种不当经常不会阻碍PHP脚本的运作,不过会阻碍脚本做希望它所做的别样工作。比如,在调用header(卡塔尔国函数前假如有字符输出,PHP平日会显得一条错误音信,即便PHP脚本继续运转,但header(卡塔尔国函数并未实践成功。

  1. supervisord,运维 Supervisor 时会运行贰个进程supervisord,它担任运维所管理的进程,并将所管理的进度作为团结的子进程来运行,並且可以在所处理的历程现身崩溃时自动重启。
  2. supervisorctl,是命令行管理工科具,能够用来施行 stop、start、restart
    等一声令下,来对那一个子进程展开管理。

指令

设置当前情况变量为DEV

fastcgi_param RUNTIME_ENVIROMENT 'DEV'

数据库帐号密码

fastcgi_param MYSQL_USERNAME 'root'
fastcgi_param MYSQL_PASSWORD 'root'

Ø  逻辑错误

安装

配备文件格式

在fastcgi_params文件中配备

fastcgi_param RUNTIME_ENVIROMENT 'DEV';
fastcgi_param MYSQL_USERNAME 'root';
fastcgi_param MYSQL_PASSWORD 'root';

在nginx.conf中配置

server {
    listen   80; 
    root /var/www;
    index index.php;
    server_name localhost;
    location /
    {   
         index index.php;
    }   

    location ~ .*.(php|php5)?$ {
        fastcgi_pass 127.0.0.1:9000;
        fastcgi_index index.php;
        include fastcgi_params;
    }   
}

这种不当实际上是最费劲的,不但不会堵住PHP脚本的进行,也不会展现出错误音讯。比如,在if语句中剖断八个变量的值是或不是等于,假使错把相比较运维标识“==”写成赋值运维标志“=”就是风度翩翩种逻辑错误,很难会被发觉。

sudo pip install supervisor

为PHP脚本设置情状变量

二个非凡则是在叁个程序试行进程中冒出的一个不一致,或是多少个事变,它搁浅了常规指令的运作,跳转到别的程序模块继续推行。所以这一个管理平日被看作程序的支配流程使用。无论是错误仍旧不行,应用程序都不能或无法以妥贴的办法管理,并做出相应的反应,希望不要错失数据还是变成程序崩溃。

创办布局文件

为眼下客商临时设置

一时设置只须要实践

export KEY=VALUE

1.八花九裂的类型

echo_supervisord_conf > /etc/supervisord.conf

为当下客户永世设置

~/.bashrc(分歧系统各有区别)中写

运行PHP脚本时,PHP分析器会尽其所能地告知它蒙受的题目。在PHP中错误报告的管理作为,都以经过PHP的安插文件php.ini中关于的安插指令分明的。此外PHP的错误报告有很各类等第,能够依附差别的错误报告品级提供相应的调节和测验方法。风度翩翩旦把PHP设置成展现出发生了怎么样不当,你或者想调度错误报告的等第。

借使现身没有权限的主题素材,能够采纳那条命令

为全体顾客(不包涵root)设置

开创文件/etc/profile.d/test.sh,写入

KEY=VALUE

级别常量

错误报告描述

E_ERROR 

致命的运行时错误(它会阻止脚本的执行)

E_WARNING 

运行时警告(非致命的错误)

E_PARSE 

从语法中解析错误

E_NOTICE 

运行时注意消息(可能是或者可能不是一个问题)

E_CORE_ERROR 

类似E_ERROR,但不包括PHP核心造成的错误

E_CORE_WARNING 

类似E_WARNING,但不包括PHP核心错误警告

E_COMPILE_ERROR 

致命的编译时错误

E_COMPILE_WARNING 

致命的编译时警告

E_USER_ERROR 

用户导致的错误消息

E_USER_WARNING 

用户导致的警告

E_USER_NOTICE 

用户导致的注意消息

E_ALL 

所有的错误、警告和注意

E_STRICT

关于PHP版本移植的兼容性和互操作性建议

sudo su – root -c “echo_supervisord_conf > /etc/supervisord.conf”

为持有顾客(包含root)设置

/etc/environment中写入

KEY=VALUE

留意,那几个文件的生效时间是顾客登入时,所以对于root来讲,须要重启机器

假定顾客期望在PHP脚本中,碰着上表中的有个别级其他大错特错开上下班时间,将错误消息告诉给顾客。则必需在配置文件php.ini中,将display_errors指令的值设置为On,开启PHP输出错误报告的功能。也足以在PHP脚本中调用ini_set(卡塔尔函数,动态设置配置文件php.ini中的某些指令。假如display_errors被启用,就能够显得满意已设置的不当品级的全体错误。当顾客在访问时,见到显示的这几个音信不但会深感吸引,况兼还会过多地走漏有关服务器的音信,使服务器变得十分不安全。所以在品种开荒或测量检验时期启用此命令,能够依靠分裂的错误报告越来越好的调节和测量试验程序。出于安全性和美感的目标,让大伙儿客户查看PHP的详尽出错音讯平常是不明智的,所以在网址投入使用时要将其剥夺。

配置文件表明

在Supervisor中设置

一部分时候PHP脚本是用Supervisor来支配的,所以记得设置supervisor配置中的environment项

2.出示错误报告的品级

想要驾驭怎么布局要求管住的历程,只要张开 supervisord.conf
就能够了,里面有很详细的注明音信。

在PHP中调用服务器境况变量

在PHP中有八个调用格局:

$env = getenv('RUNTIME_ENVIROMENT');

再有超全局变量方式:

$env = $_SERVER['RUNTIME_ENVIROMENT'];

Ø  能够通过在铺排文件php.ini中,改过配置指令error_reporting的值,校勘成功后再也启航Web服务器,则各类PHP脚本都能够按调治后的失实等级输出错误报告。下边是改正php.ini配置文件的示范,列出二种为error_reporting指令设置分化品级值的议程,能够把位运算符[&(与)、|(或)、~(非)]和不当等级常量一齐利用。如下所示:

开垦配置文件

; 可以抛出任何非注意的错误,默认值

error_reporting = E_ALL & ~E_NOTICE

; 只考虑致命的运行时错误、解析错误和核心错误

; error_reporting = E_ERROR | E_PARSE | E_CORE_ERROR

; 报告除用户导致的错误之外的所有错误

; error_reporting = E_ALL & ~(E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE)

vim /etc/supervisord.conf

Ø  或许能够在PHP脚本中应用error_reporting(卡塔尔国函数,基于各类脚本来调治这种表现。这些函数用于明确PHP应该在一定的页面内部报纸告哪些项目标不当。该函数到手三个数字或上表中八花九裂等第常量作为参数。如下所示:

默许的安插文件是下边那样的,可是这里有个坑供给介意,supervisord.pid 甚至supervisor.sock 是坐落 /tmp 目录下,不过 /tmp
目录是贮存有时文件,里面包车型地铁公文是会被 Linux
系统除去的,风度翩翩旦那些文件遗失,就不可能再通过 supervisorctl 来举办 restart
和 stop 命令了,将只会收获 unix:///tmp/supervisor.sock 海市蜃楼的不当 。

<DIV align=center>

[unix_http_server]
;file=/tmp/supervisor.sock  ; (the path to the socket file)
;修改为 /var/run 目录,避免被系统删除
file=/var/run/supervisor.sock  ; (the path to the socket file)
;chmod=0700         ; socket file mode (default 0700)
;chown=nobody:nogroup    ; socket file uid:gid owner
;username=user       ; (default is no username (open server))
;password=123        ; (default is no password (open server))

;[inet_http_server]     ; inet (TCP) server disabled by default
;port=127.0.0.1:9001    ; (ip_address:port specifier, *:port for ;all iface)
;username=user       ; (default is no username (open server))
;password=123        ; (default is no password (open server))
...

[supervisord]
;logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
;修改为 /var/log 目录,避免被系统删除
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB    ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10      ; (num of main logfile rotation backups;default 10)
loglevel=info        ; (log level;default info; others: debug,warn,trace)
;pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
;修改为 /var/run 目录,避免被系统删除
pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
...
;设置启动supervisord的用户,一般情况下不要轻易用root用户来启动,除非你真的确定要这么做
;user=chrism         ; (default is current user, required if root)
...

[supervisorctl]
; 必须和'unix_http_server'里面的设定匹配
;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
;修改为 /var/run 目录,避免被系统删除
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris       ; should be same as http_username if set
;password=123        ; should be same as http_password if set
...

 

默许意况下,进度的日志文件达到50MB时,将开展分割,最多保留13个公文,当然这个布置也足以对每一种进程单独安插。

error_reporting(0);                                 //设置为0会完全关闭错误报告

error_reporting (E_ALL);                          //将会向PHP报告发生的每个错误

error_reporting (E_ALL & ~E_NOTICE);           //可以抛出任何非注意的错误报告

权力难题

 

安装好布局文件后,应先创设上述配置文件中新扩充的文件夹。要是钦定了开发银行客户user,这里以 oxygen
为例,那么应小心相关文书的权能难题,包括日志文件,不然会冒出未有权限的不当。举例设置了开发银行客户oxygen,然后运行 supervisord 现身谬误

3.荒谬日志 

Error: Cannot open an HTTP server:
socket.error reported errno.EACCES (13)

对于PHP开垦者来讲,风流洒脱旦有个别成品投入使用,应该立即将display_errors选项关闭,避防因为那么些错误所吐露的门径、数据库连接、数据表等音讯而饱受红客攻击。然而,任何三个付加物在投入使用后,都难免会有错误现身,那么如何记录一些对开辟者有用的错误报告呢?我们能够在独立的公文文件少校错误报告作为日志记录。错误日志的记录,能够协助开采人士只怕管理职员查看系统是还是不是留慰难点。

即使出于地点的结构文件中 /var/run 文件夹,未有予以运营 supervisord
的客商 oxygen 的写权限。/var/run 文件夹实际上是链接到 /run,因而大家改革/run 的权限。

倘若要求将前后相继中的错误报告写入错误日志中,只要在PHP的配置文件中,将布署指令log_errors开启就可以。错误报告私下认可就能记录到Web服务器的日记文件里,譬喻记录到Apache服务器的荒谬日志文件error.log中。当然也得以记下错误日志到内定的公文中或发送给系统syslog,分别介绍如下:

sudo chmod 777 /run

  1.行使钦赐的文件记录错误报告日志

如此那般有一点轻松冷酷,也得以杜撰把上述配置文件中 .sock,.pid
等公事纠正到任何文件夹中,并确认保障有相应的权力就能够。日常处境下,大家得以用
root 顾客运转 supervisord
进度,然后在其所管理的进度中,再具体钦定须要以丰盛顾客运转那几个经过。

  假设选取自个儿钦定的公文记录错误日志,必供给保管将那么些文件贮存在文书档案根目录之外,以削减遭到抨击的恐怕。何况该文件一定要让PHP脚本的推行顾客(Web服务器进度全体者)具有写权限。若是在Linux操作系统中,将/usr/local/目录下的error.log文件作为不当日志文件,并设置Web服务器进度客户具备写的权力。然后在PHP的布局文件中,将error_log指令的值设置为那个荒谬日志文件的相对路线。要求将php.ini中的配置指令做如下改革。

使用浏览器来治本

error_reporting  =  E_ALL                        ;将会向PHP报告发生的每个错误

display_errors = Off                            ;不显示满足上条指令所定义规则的所有错误报告

log_errors = On                                ;决定日志语句记录的位置

log_errors_max_len = 1024                        ;设置每个日志项的最大长度

error_log = /usr/local/error.log                      ;指定产生的错误报告写入的日志文件位置

supervisor
同期提供了通过浏览器来治本进程的点子,只供给注释掉如下几行就足以了。

PHP的布署文件按上边的形式设置达成之后,相提并论复起动Web服务器。那样,在实施PHP的任何脚本文件时,所发出的富有错误报告都不会在浏览器中展现,而会记录在大团结钦命的谬误日志/usr/local/error.log中。别的,不仅能够记录满意error_reporting所定义法规的具有错误,况且还足以行使PHP中的error_log(卡塔尔(قطر‎函数,送出八个客商自定义的错误音讯。该函数的原型如下所示:

;[inet_http_server]     ; inet (TCP) server disabled by default
;port=127.0.0.1:9001    ; (ip_address:port specifier, *:port for ;all iface)
;username=user       ; (default is no username (open server))
;password=123        ; (default is no password (open server))

[supervisorctl]
...
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris       ; should be same as http_username if set
;password=123        ; should be same as http_password if set

<DIV align=center>

 图片 1

 

使用 include

bool error_log ( string message [, int message_type [, string destination [, string extra_headers]]] )

在布署文件的最终,有三个 [include] 的安排项,跟 Nginx 同样,能够include
有个别文件夹下的保有配置文件,那样我们就能够为各类进度或相关的多少个经过的配置单独写成一个文书。

       error_log(“Oracle数据库不可用!”,
0卡塔尔(قطر‎;               //将错误音讯写入到操作系统日志中

[include]
files = /etc/supervisord.d/*.ini

   error_log(“现身大麻烦了!”, 1,
“webmaster@www.mydomain.com”卡塔尔(قطر‎;   //发送到管理员邮箱中

进度的构造样例

     
 error_log(“搞砸了!”,   2,   “localhost:5000″卡塔尔(قطر‎;            //发送到本机对应5000端口的服务器中

二个轻松易行的例证如下

     
 error_log(“搞砸了!”,   3,   “/usr/local/errors.log”卡塔尔;        //发送到钦赐的文本中

; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
[program:your_program_name] 
command=python server.py --port=9000
;numprocs=1         ; 默认为1
;process_name=%(program_name)s  ; 默认为 %(program_name)s,即 [program:x] 中的 x
directory=/home/python/tornado_server ; 执行 command 之前,先切换到工作目录
user=oxygen         ; 使用 oxygen 用户来启动该进程
; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
autorestart=true      
redirect_stderr=true    ; 重定向输出的日志
stdout_logfile = /var/log/supervisord/tornado_server.log
loglevel=info

 

安装日志品级

loglevel 钦定了日记的品级,用 Python 的 print
语句输出的日志是不会被记录到日志文件中的,要求搭配 Python 的 logging
模块来输出有内定级其余日志。

多个经过

依据法定文书档案的概念,叁个 [program:x]
实际上是意味风度翩翩组同样特征或同类的进度组,也正是说二个 [program:x]
能够运维多少个进程。那组经过的成员是由此 numprocs 和 process_name
那多少个参数来规定的,那句话怎么看头吧,大家来看这一个事例。

; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
[program:foo] 
; 可以在 command 这里用 python 表达式传递不同的参数给每个进程
command=python server.py --port=90%(process_num)02d
directory=/home/python/tornado_server ; 执行 command 之前,先切换到工作目录
; 若 numprocs 不为1,process_name 的表达式中一定要包含 process_num 来区分不同的进程
numprocs=2          
process_name=%(program_name)s_%(process_num)02d; 
user=oxygen         ; 使用 oxygen 用户来启动该进程
autorestart=true      ; 程序崩溃时自动重启
redirect_stderr=true    ; 重定向输出的日志
stdout_logfile = /var/log/supervisord/tornado_server.log
loglevel=info

上面这么些事例会运行三个经过,process_name 分别为 foo:foo_01 和
foo:foo_02。通过那样黄金年代种艺术,就能够用叁个 [program:x]
配置项,来运行生机勃勃组极其周围的进程。

再介绍多个构造项 stopasgroup 和 killasgroup

; 默以为 false,借使设置为 true,当进程收到 stop
非信号时,会自行将该时限信号发给该过程的子进度。假诺那一个构造项为
true,那么也包罗 killasgroup 为 true。举个例子在 Debug 方式接受 Flask
时,Flask 不会将摄取到的 stop
时域信号也传递给它的子进度,由此就要求设置那么些结构项。

stopasgroup=false       ; send stop signal to the UNIX process 

; 默认为 false,如果设置为 true,当进程收到 kill 信号时,会自动将该信号发给该进程的子进程。如果这个程序使用了 python 的 multiprocessing 时,就能自动停止它的子线程。
killasgroup=false       ; SIGKILL the UNIX process group (def false)

更详实的安插例子,能够参见如下,官方文书档案在那间

;[program:theprogramname]
;command=/bin/cat       ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1          ; number of processes copies to start (def 1)
;directory=/tmp        ; directory to cwd to before exec (def no cwd)
;umask=022           ; umask for process (default None)
;priority=999         ; the relative start priority (default 999)
;autostart=true        ; start at supervisord start (default: true)
;autorestart=unexpected    ; whether/when to restart (default: unexpected)
;startsecs=1          ; number of secs prog must stay running (def. 1)
;startretries=3        ; max # of serial start failures (default 3)
;exitcodes=0,2         ; 'expected' exit codes for process (default 0,2)
;stopsignal=QUIT        ; signal used to kill process (default TERM)
;stopwaitsecs=10        ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false       ; send stop signal to the UNIX process group (default false)
;killasgroup=false       ; SIGKILL the UNIX process group (def false)
;user=chrism          ; setuid to this UNIX account to run the program
;redirect_stderr=true     ; redirect proc stderr to stdout (default false)
;stdout_logfile=/a/path    ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB  ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10   ; # of stdout logfile backups (default 10)
;stdout_capture_maxbytes=1MB  ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false  ; emit events on stdout writes (default false)
;stderr_logfile=/a/path    ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB  ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10   ; # of stderr logfile backups (default 10)
;stderr_capture_maxbytes=1MB  ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false  ; emit events on stderr writes (default false)
;environment=A="1",B="2"    ; process environment additions (def no adds)
;serverurl=AUTO        ; override serverurl computation (childutils)

将四个经过按组管理

Supervisor 同一时间还提供了此外生机勃勃种进程组的保管办法,通过这种方法,能够运用
supervisorctl 命令来治本风度翩翩组经过。跟 [program:x]
的进度组分歧的是,这里的进程是二个个的 [program:x] 。

[group:thegroupname]
programs=progname1,progname2 ; each refers to 'x' in [program:x] definitions
priority=999         ; the relative start priority (default 999)

当增多了上述配置后,progname1 和 progname2 的进度名就能够化为
thegroupname:progname1 和 thegroupname:progname2
过后将在用这些名字来管理进程了,并非前面包车型地铁 progname1。

其后执行 supervisorctl stop thegroupname: 就能够并且终止 progname1 和
progname2,推行 supervisorctl stop thegroupname:progname1 就能够终止
progname1。supervisorctl 的授命咱们稍后介绍。

启动 supervisord

施行 supervisord 命令,将会运转 supervisord
进度,同一时间大家在陈设文件中安装的长河也会相应运营。

# 使用默认的配置文件 /etc/supervisord.conf
supervisord
# 明确指定配置文件
supervisord -c /etc/supervisord.conf
# 使用 user 用户启动 supervisord
supervisord -u user

越多参数请参见文档

supervisorctl 命令介绍

# 停止某一个进程,program_name 为 [program:x] 里的 x
supervisorctl stop program_name
# 启动某个进程
supervisorctl start program_name
# 重启某个进程
supervisorctl restart program_name
# 结束所有属于名为 groupworker 这个分组的进程 (start,restart 同理)
supervisorctl stop groupworker:
# 结束 groupworker:name1 这个进程 (start,restart 同理)
supervisorctl stop groupworker:name1
# 停止全部进程,注:start、restart、stop 都不会载入最新的配置文件
supervisorctl stop all
# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervisorctl reload
# 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl update

在乎:展现用 stop 结束掉的经过,用 reload 也许 update
都不会活动重启。也得以参照这里

开机自动运行 Supervisord

Supervisord
暗中认可处境下并从未被设置成服务,它自个儿也是一个进程。官方已经提交了剧本能够将
Supervisord
安装成服务,能够参照这里查看种种操作系统的设置脚本,可是笔者用官方这里给的
Ubuntu 脚本却一点办法也想不出来运行。

安装方式能够参照他事他说加以考查
serverfault上的应对。

举例说小编是 Ubuntu 系统,能够那样安装,这里选用了另外多少个剧本

# 下载脚本
sudo su - root -c "sudo curl https://gist.githubusercontent.com/howthebodyworks/176149/raw/d60b505a585dda836fadecca8f6b03884153196b/supervisord.sh > /etc/init.d/supervisord"
# 设置该脚本为可以执行
sudo chmod +x /etc/init.d/supervisord
# 设置为开机自动运行
sudo update-rc.d supervisord defaults
# 试一下,是否工作正常
service supervisord stop
service supervisord start

精心:那么些剧本下载下来后,还需检查一下与大家的布置是或不是相适合,比方私下认可的布署文件路线,pid
文件路线等,要是存在差异则须要打开一些改过。

实际上还应该有叁个轻巧的方法,因为 Linux 在起步的时候会实行 /etc/rc.local
里面包车型地铁脚本,所未来生可畏旦在那地丰硕实行命令就足以

# 如果是 Ubuntu 添加以下内容
/usr/local/bin/supervisord -c /etc/supervisord.conf

# 如果是 Centos 添加以下内容
/usr/bin/supervisord -c /etc/supervisord.conf

以上内容必要加多在 exit 命令前,何况由于在试行 rc.local 脚本时,PATH
碰着变量未全部开始化,因而命令要求运用相对路线。

在拉长前,先在极限测验一下发令是不是能健康推行,倘若找不到
supervisord,能够用如下命令找到

sudo find / -name supervisord

您大概感兴趣的稿子:

  • nodejs
    图解express+supervisor+ejs的用法(推荐)
  • python进度管理工具supervisor的设置与使用教程
  • 利用Supervisor管理Redis进程的法子教程
  • centos7施用supervisor的详尽教程
  • PHP框架Laravel中达成supervisor实践异步进度的章程
  • PHP工程师玩转Linux种类使用supervisor达成守护进度
  • Python使用Supervisor来保管进程的法子
  • Mac下Supervisor进度监察和控制管理工具的安装与铺排
  • node.js开荒中选取Node
    Supervisor达成监测文件改革并自动重启应用
  • python进度处理工科具supervisor使用实例
  • 使用Python的Supervisor实行进度监控以至自动运维
  • 安详严整supervisor使用教程

发表评论

电子邮件地址不会被公开。 必填项已用*标注