Frp 在 FreeBSD 上的启动与进程守护脚本

Frpc 或 Frps 在运行过程中有时候会因一些异常情况突然停止,这时搭建的服务就变的不可用,其实只要使用 FreeBSD 自带的 daemon  工具,即可做到当工作进程异常中止时自动重启工作进程,又可直接使用 service 命令进行管理。

FreeBSD手册中的信息有相关说明,daemon 支持 -r 来开启重启进程机制,-R 则设定多少秒后重启,默认是 1 秒。

通过 -p 指定工作进程的 pid 文件来告诉 rc.subr 具体的工作进程是哪个,-P 则是 daemon 本身的 pid。

#!/bin/sh
 
# PROVIDE: frps
# REQUIRE: LOGIN
# KEYWORD: shutdown
 
. /etc/rc.subr
 
name="frps"
rcvar=frps_enable
 
load_rc_config $name
 
: ${frps_enable="NO"}
: ${frps_user="nobody"}
: ${frps_flags=""}

daemon_pidfile="var/run/frps_daemon.pid" 
pidfile="/var/run/frps.pid"
command="/usr/local/opt/frp_0.21.0_freebsd_amd64/frps"
start_cmd="/usr/sbin/daemon -r -R 5 -u $frps_user -P $daemon_pidfile -p $pidfile -t $name $command $frps_flags"
start_postcmd="${name}_poststart"
stop_cmd="${name}_stop"

frps_poststart()
{
    echo "${name}_daemon running pid `cat ${daemon_pidfile}`."
    echo "${name} running pid `cat ${pidfile}`."
}

frps_stop()
{
    if [ -f "$daemon_pidfile" ]; then
        pid=`cat $daemon_pidfile`
        echo "Stopping pid ${pid}."
        kill $pid
    else
	    echo "${name} not running?"
    fi
}

 
run_rc_command "$1"

将以上脚本保存在 /usr/local/etc/rc.d/frps 文件中,给予 +x 权限,在 /etc/rc.conf 中添加 frps_enable="YES" 与 frps_flags 指定 frps 的运行参数即可做到开机自动启动 frps。

使用 service frps start|status|stop 可控制与检查 frps 的运行。

frpc 的话参考相应处进行修改即可。

FreeBSD daemon 命令的手册:https://www.freebsd.org/cgi/man.cgi?query=daemon

FreeBSD rc.d 脚本手册:https://www.freebsd.org/doc/zh_CN/articles/rc-scripting/article.html

Mac 上的 curl 报 SSLRead(56) error 相关错误的解决办法

这个问题的原因是因为OSX curl默认使用 SecureTransport 而不是OpenSSL.

在终端可以执行以下检查当前SSL version用的是SecureTransport还是OpenSSL.

$ php -i | grep "SSL Version"

如果返回结果是如下,当用curl的时候会报SSLRead() error。

SSL Version => SecureTransport

可以通过重新编译curl使其支持OpenSSL. 

编译curl支持openssl:
./configure --prefix=/usr/local/curl --without-nss --with-ssl=/usr/local/Cellar/openssl/1.0.2d_1/
make
make install

PHP中如果没添加curl扩展可以通过以下方式编译添加:

添加curl扩展
phpize
./configure --with-php-config=/usr/local/php-5.6.16/bin/php-config --with-curl=/usr/local/curl/
make
make install

在 Mac OS X 10.11 (EL Capitan) 上手动编译 php 并且使用系统自带的 openssl dylib

TEST

OneExplorer 更新日志

OneExplorer 是一个单文件的 php 文件浏览器,主要用于展示服务器目录/文件列表以方便访问和下载等。

本文展示 OneExplorer 的更新日志,关于 OneExplorer 请点击这里。

阅读全部内容 >>

PHP 加载 php_curl.dll 时启动出现 PHP Warning: PHP Startup: in Unknown on line 0 错误的解决办法

最近升级了一下开发环境的 PHP 版本,结果启动后一直找不到 curl 相关函数,查看日志,发现 Apache 启动时出现 PHP Warning:  PHP Startup:  in Unknown on line 0 的错误,逐个排查后,发现取消 php_curl.dll 的加载就没有这个错误了。搜索各种查,都说要把几个 dll 文件复制到 Windows 或者 Apache 的目录里,但在我这都不管用,最后发现唯有一个 libssh2.dll 文件复制到 Apache 的 bin 目录才管用。

但是现在可以不用复制文件,就可以解决的办法(洁癖。。),在 Apache 的配置文件中,加入以下配置,即可:

LoadFile "C:/php/libssh2.dll"

里面文件的路径就是你 php 目录下 libssh2.dll 文件路径,根据自己情况修改,然后重启即可。还有一些人的原因是找不到 libeay32.dll 和 ssleay32.dll 这两个文件,解决的办法大致相同。

另外一种办法是把你的 php 目录路径加入到环境变量 Path 中去,记住是系统环境变量,而不是用户环境变量,我的情况是在用户环境变量下,libeay32.dll 和 ssleay32.dll 可以找到但却找不到 libssh2.dll,只有放到系统环境变量下才没有问题。

所以原因大概是 PHP 与 Apache 工作时,无法正确找到动态库文件。原因可能有多种,比如系统参数环境变量、系统文件版本、或者某些重要的设置之类的有不同,比如我家里的电脑上就没这个问题,所以这里的答案仅供参考,也许原因正好相同那就解决了。