Supervisord 添加环境变量 environment
原文: https://www.bbsmax.com/A/Ae5R4o13zQ/
[program:usercenter]
directory = /home/leon/projects/usercenter ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = leon ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /data/logs/usercenter_stdout.log
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere
PHP 如何判断对象为空的方法
PHP 如何判断对象为空的方法
在PHP中,判断对象是否为空是开发过程中常见的需求之一。在处理对象时,了解如何准确判断对象是否为空可以帮助我们编写更健壮和可靠的代码。本文将介绍在PHP中判断对象为空的方法,并提供一些实用的技巧和示例。
使用 empty() 函数
在PHP中,可以使用empty()函数来判断变量是否为空。然而,empty()函数对于对象的判断并不总是准确的,因为它将对象的属性视为空,即使对象本身存在。因此,对于对象,我们需要使用其他方法来进行判断。
使用 isset() 函数
isset()函数用于检查变量是否已设置并且不为null。当应用于对象时,isset()函数将检查对象是否存在,并且其属性是否存在且不为null。
if (isset($object)) {
// 对象存在且不为null
} else {
// 对象不存在或为null
}
使用 is_null() 函数
is_null()函数用于检查变量是否为null。当应用于对象时,is_null()函数将检查对象是否为null。
if (is_null($object)) {
// 对象为null
} else {
// 对象不为null
}
示例
假设我们有一个名为User的类,表示用户对象。我们可以使用上述方法来判断$user对象是否为空。
class User {
public $name;
public function __construct($name) {
$this->name = $name;
}
}
// 创建一个空的用户对象
$user = new User('');
// 使用 isset() 函数判断对象是否为空
if (isset($user)) {
echo "对象存在且不为null\n";
} else {
echo "对象不存在或为null\n";
}
// 使用 is_null() 函数判断对象是否为null
if (is_null($user)) {
echo "对象为null\n";
} else {
echo "对象不为null\n";
}
应用场景
在实际开发中,判断对象是否为空的需求可能涉及到以下情况:
- 在接收和处理用户输入时,需要验证对象是否为空。
- 在从数据库或其他数据源检索数据时,需要检查对象是否为空以处理异常情况。
- 在进行对象属性操作之前,需要确保对象存在且不为空。
文献引用
在编写本文时,以下资源对理解PHP中判断对象为空的方法提供了帮助:
- PHP 官方文档:empty()
- PHP 官方文档:isset()
- PHP 官方文档:is_null()
这些文档提供了对empty()、isset()和is_null()函数的详细解释和示例,有助于更好地理解如何在PHP中判断对象是否为空。
通过合理使用isset()和is_null()函数,可以准确判断对象是否为空,从而编写更加健壮和可靠的PHP代码。
踩坑:IPv6 MySQL IP Chat(15) 引发 Bug
踩坑:IPv6 MySQL IP Chat(15) 引发 Bug
在开发过程中,使用IPv6地址存储和处理可能会引发一些意想不到的问题。本文将讨论在使用MySQL数据库存储IPv6地址时,在Chat应用程序中遇到的一个特定问题,以及如何解决这个Bug。
Bug描述
假设我们正在开发一个Chat应用程序,其中用户可以通过IPv6地址进行连接和通信。我们选择使用MySQL数据库来存储用户的IP地址。在Chat应用程序中,我们将IPv6地址存储为VARBINARY(16)类型以确保完整性和正确性。
然而,在测试过程中,我们发现一个奇怪的Bug:有时候无法正确识别并连接到IPv6地址为::1的用户。经过调试和分析,我们发现只有在用户的IPv6地址为::1时才会出现此问题。
Bug分析
经过深入分析,我们发现MySQL在处理IPv6地址时,将::1视为IPv4地址的回环地址127.0.0.1,而不是IPv6的本地主机地址。
这是因为在MySQL的IPv6支持中,将IPv4地址映射到IPv6地址空间中的一个特定区域。因此,当MySQL遇到IPv6地址::1时,会将其解释为IPv4的回环地址127.0.0.1,而不是标准的IPv6本地主机地址。
解决方案
针对这个Bug,我们可以采取以下几种解决方案:
- 使用标准IPv6本地主机地址:在应用程序中,我们可以明确使用标准的IPv6本地主机地址
::1,而不是依赖MySQL的处理方式。这样可以避免MySQL将其误解为IPv4地址。 - 使用IPv4兼容模式:在MySQL配置中启用IPv4兼容模式,以便MySQL正确识别和处理IPv6地址。这可以通过修改MySQL配置文件中的
--bind-address参数来实现。 - 升级MySQL版本:某些旧版本的MySQL可能存在IPv6处理方面的Bug。通过升级到最新版本的MySQL,可以获得更好的IPv6支持和Bug修复。
结论
在处理IPv6地址时,尤其是在使用MySQL存储和处理IPv6地址时,开发人员需要注意潜在的问题和Bug。在本文中,我们讨论了一个特定的Bug,即MySQL将IPv6地址::1错误地解释为IPv4地址的回环地址127.0.0.1。通过深入分析和合适的解决方案,我们可以有效地解决这类Bug,并确保应用程序的正确性和稳定性。
文献引用
在编写本文时,以下资源对理解和解决MySQL中处理IPv6地址的问题提供了帮助:
- MySQL官方文档:IPv6 Support
- Stack Overflow:MySQL IPv6 Error with php
- MySQL Bug数据库:Bug #88010 - MySQL does not properly recognize IPv6 addresses
这些资源提供了对MySQL中IPv6支持和相关Bug的详细解释和讨论,对解决类似问题具有指导意义。
通过引用和参考这些资源,我们可以更好地理解和解决在开发过程中遇到的IPv6相关Bug,从而提高应用程序的质量和稳定性。
Linux 环境变量命令 ENV
env:显示所有的环境变量
[root@root ~] env
XDG_SESSION_ID=10532
HOSTNAME=len
TERM=linux
SHELL=/bin/bash
HISTSIZE=1000
SSH_CLIENT=172.31.0.9 59430 22
SSH_TTY=/dev/pts/0
USER=root
LS_COLORS=rs=0:di=01;34:ln=01;36:mh=00:pi=40;33:so=01;35:do=01;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=01;05;37;41:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=01;32:*.tar=01;31:*.tgz=01;31:*.arc=01;31:*.arj=01;31:*.taz=01;31:*.lha=01;31:*.lz4=01;31:*.lzh=01;31:*.lzma=01;31:*.tlz=01;31:*.txz=01;31:*.tzo=01;31:*.t7z=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.dz=01;31:*.gz=01;31:*.lrz=01;31:*.lz=01;31:*.lzo=01;31:*.xz=01;31:*.bz2=01;31:*.bz=01;31:*.tbz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.war=01;31:*.ear=01;31:*.sar=01;31:*.rar=01;31:*.alz=01;31:*.ace=01;31:*.zoo=01;31:*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.cab=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.svg=01;35:*.svgz=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.webm=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;35:*.vob=01;35:*.qt=01;35:*.nuv=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.flv=01;35:*.gl=01;35:*.dl=01;35:*.xcf=01;35:*.xwd=01;35:*.yuv=01;35:*.cgm=01;35:*.emf=01;35:*.axv=01;35:*.anx=01;35:*.ogv=01;35:*.ogx=01;35:*.aac=01;36:*.au=01;36:*.flac=01;36:*.mid=01;36:*.midi=01;36:*.mka=01;36:*.mp3=01;36:*.mpc=01;36:*.ogg=01;36:*.ra=01;36:*.wav=01;36:*.axa=01;36:*.oga=01;36:*.spx=01;36:*.xspf=01;36:
MAIL=/var/spool/mail/root
PATH=/usr/local/node/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PWD=/root
LANG=en_US.UTF-8
MODULEPATH=/usr/share/Modules/modulefiles:/etc/modulefiles
LOADEDMODULES=
HISTCONTROL=ignoredups
SHLVL=1
HOME=/root
LOGNAME=root
SSH_CONNECTION=172.31.0.9 59430 172.31.0.27 22
MODULESHOME=/usr/share/Modules
LESSOPEN=||/usr/bin/lesspipe.sh %s
XDG_RUNTIME_DIR=/run/user/0
BASH_FUNC_module()=() { eval `/usr/bin/modulecmd bash $*`
}
_=/usr/bin/env
添加 环境变量
vi /etc/profile
添加
export GOOGLE_APPLICATION_CREDENTIALS=/opt/webserver/detect-111.json
source /etc/profile 好了