最新消息:XAMPP默认安装之后是很不安全的,我们只需要点击左方菜单的 "安全"选项,按照向导操作即可完成安全设置。

Linux 程序后台管理与开机自启

XAMPP新闻 admin 90浏览 0评论

Linux 程序后台管理与开机自启

#我越安静,越平和,越淡定,越忍耐,我越无所谓,我眼里深藏的汹涌就越沸腾。

实际场景:

你有没有遇见过这种情况,xshell远程到服务端运行你的程序,当你关闭xshell,再登录你会发现你的程序被杀死了,这跟在终端运行程序,关闭掉终端一个效果。

那么如何解决上面说的,关闭终端而不结束程序呢?

 

答案是脱机管理,我们常说的后台运行,指的是避免被ctrl+c中断掉的一种情形,并不是放到系统的后台去。

# “ & ” 表示在后台运行程序
nohup command &
#例如:后台运行 ./proxy
nohup ./proxy &
# >:重定向的符号 0:表示stdin 标准输入 1:表示stdout 标准输出 2:表示stderr 标准错误信息
# 2>&1是将标准错误(2)重定向到标准输出(&1),标准输出(&1)再被重定向输入到myout.txt文
nohup  command  > file  2>&1  &
#例如 将./proxy 程序的shell日志放到 LOG2.txt
nohup ./proxy > LOG2.txt 2>&1 & 
输出:
[1] 25342
acobit@desktop:~/jia/Ant$ 

现在可以看到,当你执行程序之后,终端依旧可以交互,且不能用ctrl+c终止程序。

后台运行程序就搞定啦!即使关闭当前终端窗口,再次打开终端利用ps -aux | grep proxy命令依旧可以看到我们运行的程序。

解决掉了程序后台运行,且将打印的日志,存放与LOG2.txt中,这样看似完美解决了后台运行、保存了打印日志,但我们还需考虑到,随着时间,日志会越来越多,需要清理一下,或者按时间分片保存。

这个问题在最后解决。

# 程序开机自启动


在win系统,开机自启动只需将程序放入到启动文件中,就可以实现开机自启。

ubuntu开机自启,也有很多方法,其中我选择了将脚本放入到/etc/rc.local

rc.local中的命令会在系统启动完成之后运行(SysVinit)。

注:默认用root用户执行命令。(开始不知道,掉入到这个坑了)

 

正常执行脚本ps -aux 显示

drh000032

开机自启动执行脚本 ps -aux显示

drh0000032

# ps命令拓展:

ps -aux | grep proxy
# -a 显示终端机下所有程序,包括其他用户
# -u 以用户为主的格式来显示程序状况
# -x 显示所有程序
# | 管道命令,处理由|前1一个命令传来的正确信息
# grep 分析一行信息,当中有我们所需的信息,就将该行拿出来。
# aux 整体代表:查看系统所有的进程数据

# 分析一下 ps -aux输出的信息

USER     PID   %CPU  %MEM VSZ    RSS  TTY     STAT  START   TIME   COMMAND                              
#正常脚本启动
racobit  25342  0.2  0.0 150124   840 pts/2    Sl   17:13   0:08 /home/racobit/jiafeng/TCP_Agent/proxy
#开机自启动
root      5801  0.0  0.0   2036   492 ?        S    16:56   0:00 /home/racobit/jiafeng/TCP_Agent/proxy

# USER:该进程属于那个账户创建的,
# PID:进程标识符号
# %CPU:进程使用掉的 CPU 资源百分比
# %MEM:进程占用的物理内存百分比
# VSZ:进程使用掉的虚拟内存(KB)
# RSS:进程占用的固定内存量(KB)
# TTY:在那个终端机运行(tty1~tty6),与终端机无关显示?pts/0 则是网络连接主机的进程    
# STAT:进程状态 (S:sleep休眠 )(R:running运行中)(D:不可唤醒的睡眠)(T:stop停止状态)(Z:僵尸状态)l 多进程的(使用 CLONE_THREAD, 类似 NPTL pthreads);
# START:进程触发显示时间
# TIME:该进程被触发启动的时间 
# COMMAND:执行的实际命令                              

通过比较我们发现,开机自启使用的是root用户,正常脚本启动的是racobit用户。

 

如何解决,开机时候用普通用户执行该命令呢?

# su (swith user)用户切换命令,可实现任意身份的切换
su [-fmp] [-c command] [-s shell] [--help] [--version] [-] [USER [ARG]]
-:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(
-l:同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号。
-p:表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件)。
-m:和 -p 一样;
-c 命令:仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令。

#我们需要将root账户切换到普通用户,并执行命令,
su - username -c "command"
# 例如:
su - jiafeng -c "/bin/bash /home/jiafeng/clear.sh"

# 编辑脚本启动程序test.sh

#! /bin/sh

 nohup /home/jiafeng/Agent/proxy > /home/jiafeng/Agent/LOG2.txt 2>&1 &

# 修改脚本权限

sudo chmod +x test.sh 

# 在rc.local脚本中添加开机自启动程序

sudo vim /etc/rc.local
添加
#!/bin/sh -e
su - jiafeng -c "/bin/sh /home/jiafeng/self-start/test.sh"
exit 0

# 分割nohup生成的日志文件

#/bin/sh
#CURR_TIME=`date -d "-1 day" "+%Y%m%d"`
CURR_TIME=`date -d "0 day" "+%Y%m%d"`
echo "$CURR_TIME"
SOUR_PATH=/home/jiafeng/Agent/LOG2.txt
TAR_PATH=/home/jiafeng/Agent/log/nohup_"$CURR_TIME"_
FILE_SIZE=`ls -l $SOUR_PATH | awk '{print $5}'`  
# 200m
# nohup.log 超过200m 日志切割
#测试
EXPECT_SIZE=1024
# 1k = 1024byte 1m = 1024k 
if [ "$FILE_SIZE" -gt "$EXPECT_SIZE" ];then
        echo "lograte cut log..."
        #测试
        split -C 1k -d -a 5 $SOUR_PATH $TAR_PATH
        cat /dev/null > $SOUR_PATH
        #清理7天前nohup 文件
        find /home/jiafeng/Agent/log -type f -mtime +6  -name '*.out' -exec rm -f {} \;
fi

#使用crontab -e 创建一个定时执行分割清理脚本即可。

#End 2021/7/14 22:22

转载请注明:XAMPP中文组官网 » Linux 程序后台管理与开机自启