Linux下后台运行几种方法

From: https://blog.csdn.net/u013253075/article/details/121979156

1、nohup
将程序以忽略挂起信号的方式运行起来

补充说明
nohup命令 可以将程序以忽略挂起信号的方式运行起来,被运行的程序的输出信息将不会显示到终端。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。
如果当前目录的 nohup.out 文件不可写,输出重定向到$HOME/nohup.out文件中。
如果没有文件能创建或打开以用于追加,那么 command 参数指定的命令不可调用。
如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符。

简单实例:
nohup command &

指定输出实例
nohup command > myout.file 2>&1 &

其他相关命令,比较常用
ctrl + z #可以将一个正在前台执行的命令放到后台,并且处于暂停状态。
fg #将后台任务切换到前台执行
bg #将一个在后台暂停的命令,变成在后台继续执行。如果后台中有多个命令,可以用bg %jobnumber将选中的命令调出
jobs #查看后台运行的状态,jobs -l选项可显示所有任务的PID
ps -ef | grep command 或者 ps aux | grep command #查看进程
kill -9 进程id #杀掉对应的进程,
更高级的用法如下:
ps aux | grep command | grep -v grep | awk ‘{print $1}’ | xargs kill -9 #这个表示直接通过command获取进程id并直接kill掉

2、screen
用于命令行终端切换

a、会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,
用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。
同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)

b、多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,
并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,
可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。 会话共享 Screen可以让一个或多个用户
从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,
可以对窗口进行密码保护。

c、screen的安装
yum install -y screen

基本语法
screen -AmRvx -[ls -wipe][-d <作业名称>][-h <行数>][-r <作业名称>][-s ][-S <作业名称>]

选项
-A  将所有的视窗都调整为目前终端机的大小。
-d <作业名称>  将指定的screen作业离线。
-h <行数>  指定视窗的缓冲区行数。
-m  即使目前已在作业中的screen作业,仍强制建立新的screen作业。
-r <作业名称>  恢复离线的screen作业。
-R  先试图恢复离线的作业。若找不到离线的作业,即建立新的screen作业。
-s  指定建立新视窗时,所要执行的shell。
-S <作业名称>  指定screen作业的名称。
-v  显示版本信息。
-x  恢复之前离线的screen作业。
-ls或–list  显示目前所有的screen作业。
-wipe  检查目前所有的screen作业,并删除已经无法使用的screen作业。

常用screen参数
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session

在每个screen session 下,所有命令都以 ctrl+a(Ctrl + a) 开始。

Ctrl + a ? -> 显示所有键绑定信息
Ctrl + a c -> 创建一个新的运行shell的窗口并切换到该窗口
Ctrl + a n -> Next,切换到下一个 window
Ctrl + a p -> Previous,切换到前一个 window
Ctrl + a 0..9 -> 切换到第 0..9 个 window
Ctrl+a [Space] -> 由视窗0循序切换到视窗9
Ctrl + a Ctrl + a -> 在两个最近使用的 window 间切换
Ctrl + a x -> 锁住当前的 window,需用用户密码解锁
Ctrl + a d -> detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
Ctrl + a z -> 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
Ctrl + a w -> 显示所有窗口列表
Ctrl + a t -> time,显示当前时间,和系统的 load
Ctrl + a k -> kill window,强行关闭当前的 window
Ctrl + a -> 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 [vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
Ctrl + a ] -> paste,把刚刚在 copy mode 选定的内容贴上

操作示例见:https://wangchujiang.com/linux-command/c/screen.html

3、daemonize工具

安装

git clone git://github.com/bmc/daemonize.git
sh configure && make && sudo make install

-a #挂载到输出文件,而不是冲掉默认值。只有应用了-e and/or -o 被指定的情况。
-e #重定向输出标准错误到指定的文件中,替代/dev/null
-o #重定向输出标准到指定的文件中,替代/dev/null
-E name=value #增加环境变量给给后台程序。这个这个参数类型一定要是name=value格式。参数可以设置多次。
-c directory #定制运行命令前的目录。
-p pidfile #定制自己的pid存放位置。
-l lockfile #单实例启动时将会检查这个文件。
-u user #定制程序以谁的身份运行的。

centos 8 install php 8


From: https://www.jianshu.com/p/04e8ad506ad7

更新软件到最新

yum update

下载php源码并解压

wget https://www.php.net/distributions/php-8.0.0.tar.gz

tar-xvzf php-8.0.0.tar.gz

cd php-8.0.0

安装gcc软件

yum install gcc gcc-c++ make

安装php依赖软件

yum install libxml2 libxml2-devel openssl openssl-devel freetype freetype-devel libzip libzip-devel sqlite sqlite-devel gd gd-devel libcurl-devel libicu libicu-devel libxslt libxslt-devel

安装oniguruma软件

yum install https://rpms.remirepo.net/enterprise/8/remi/x86_64/oniguruma5php-6.9.8-1.el8.remi.x86_64.rpm

yum install https://rpms.remirepo.net/enterprise/8/remi/x86_64/oniguruma5php-devel-6.9.8-1.el8.remi.x86_64.rpm

配置编译

./configure –prefix=/usr/local/php –with-zlib-dir –enable-mbstring –enable-soap –enable-calendar –with-curl –disable-rpath –enable-gd –enable-gd-jis-conv –with-bz2 –with-zlib –enable-sockets –enable-sysvsem –enable-sysvshm –enable-pcntl –enable-mbregex –enable-exif –enable-bcmath –with-mhash –with-pdo-mysql –with-mysqli –with-openssl –with-fpm-user=www –with-fpm-group=www –with-libdir=/lib/x86_64-linux-gnu/ –enable-ftp –with-gettext –with-xsl –enable-opcache –enable-fpm –with-iconv –with-zip –with-pear –with-freetype –enable-intl

开始编译

make -j4 #指定同时运行的作业数量,让尽可能多的作业同时运行。如果有一个以上的“-j”选项,最后一个选项是有效的。

安装php

make install

添加php.ini配置文件

cp php.ini-production /usr/local/php/lib/php.ini

以下操作为配置php

添加用户

useradd www

修改php-fpm.conf

cd /usr/local/php/etc

cp php-fpm.conf.default php-fpm.conf

cd php-fpm.d

cp www.conf.default www.conf

编辑www.conf文件,根据自己的服务器配置修改以下配置

pm.max_children=10

pm.start_servers=5

pm.min_spare_servers=4

pm.max_spare_servers=7

移除前面的注释;

;env[HOSTNAME] = $HOSTNAME

;env[PATH] = /usr/local/bin:/usr/bin:/bin

;env[TMP] = /tmp

;env[TMPDIR] = /tmp

;env[TEMP] = /tmp

修改php配置文件

cd /usr/local/php/lib

vim php.ini

修改内存限制

memory_limit=512M

修改上传文件限制

post_max_size=512M

upload_max_filesize=512M

启用OPcache 和 JIT; OPcache [1] 通过将 PHP 脚本预编译的字节码存储到共享内存中来提升 PHP 的性能, 存储预编译字节码的好处就是 省去了每次加载和解析 PHP 脚本的开销。

移除注释

;zend_extension=opcache

[opcache]

opcache.enable=1

opcache.memory_consumption=128

;opcache.interned_strings_buffer=8

;opcache.max_accelerated_files=10000

;opcache.validate_timestamps=1

在[opcache]添加jit支持

opcache.jit_buffer_size=128M

注意:虚拟机里可能启动时报错。

设置php-fpm开机启动

vim /usr/lib/systemd/system/php-fpm.service

其内容为

[Unit]

Description=The PHP FastCGI Process ManagerAfter=network.target

[Service]

Type=simple

PIDFile=/usr/local/php/var/run/php-fpm.pid

ExecStart=/usr/local/php/sbin/php-fpm –nodaemonize –fpm-config /usr/local/php/etc/php-fpm.conf

ExecReload=/bin/kill -USR2 $MAINPID

PrivateTmp=true

[Install]

WantedBy=multi-user.target

保存退出后执行

systemctl enable php-fpm

systemctl start php-fpm

查看运行状态

systemctl status php-fpm

Linux命令行

ln -s /usr/local/php/bin/php /usr/bin/php

安装libphp.so

sudo yum install http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/php-common-8.0.20-1.module_el8.7.0+1191+c110972c.x86_64.rpm

sudo yum install http://mirror.centos.org/centos/8-stream/AppStream/x86_64/os/Packages/php-embedded-8.0.20-1.module_el8.7.0+1191+c110972c.x86_64.rpm

接着安装和配置httpd

http://yufeng.group/install-httpd/