linux发布成服务,linux服务简单部署
1.后台运行
在linux下运行一个程序,打开终端,如果是可执行文件则是 ./binary_name 如果是python脚本,运行命令是python file_name.py 此时的程序运行时依赖于当前终端的,如果按下Ctrl+C就会产生中断信号,或者关闭当前终端窗口,该程序的运行就会停止。作为一个服务器程序肯定不能收到终端窗口的影响,必须保证能够后台运行。
在应用Unix/Linux时,我们一般想让某个程序在后台运行,就会涉及到nohup命令。
nohup 命令
用途:不挂断地运行命令。
语法:nohup Command [ Arg … ] [ & ]
描述:nohup 命令运行由 Command 参数和任何相关的 Arg 参数指定的命令,忽略所有挂断(SIGHUP)信号。在注销后使用 nohup 命令运行后台中的程序。要运行后台中的 nohup 命令,添加 & ( 表示”and”的符号)到命令的尾部。
无论是否将 nohup 命令的输出重定向到终端,输出都将附加到当前目录的 nohup.out 文件中。如果当前目录的 nohup.out 文件不可写,输出重定向到 $HOME/nohup.out 文件中。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。如果标准错误是一个终端,那么把指定的命令写给标准错误的所有输出作为标准输出重定向到相同的文件描述符
如果需要把输出重定向到文件中:nohup command > myout.file 2>&1 >> logfile &
在linux输出分为两种,标准输出和错误输出,标准输出是1,错误输出是2。
2.环境部署
作为一个后台运行的程序在服务器上部署是需要按照一定的工程目录去搭建目录,方便后期的运维管理,一个项目一个目录,目录名为项目名后加_000_000 如recommend_000_000,000_000主要是用于备份号,以及模块等,然后在目录下分别创建bin、log、data、conf等目录,分别存放binary,log文件,导入数据,配置数据等。
在bin目录下存放可执行文件,程序启动一般都需要配置一些参数,这样调整参数时不需要重新编译,启动需要用脚本命令来启动的。
目录下会有一个类似于run.sh文件,该脚本可以执行启动,停止,重启程序。
例如:sh run.sh start|stop|restart
run.sh:
LOG_DIR=/home/liu/autogen
ARGS=./
cmd="./1 "
recommend_stop() {
echo " pid=$(ps aux| grep $BIN_DIR/$BIN_NAME | grep $ARGS | awk '{print $2}') "
pid=$(ps aux | grep $BIN_DIR/$BIN_NAME | grep $ARGS | awk '{print $2}')
if [ "$pid" == "" ]; then
return
fi
kill -9 $pid
}
recommend_start() {
echo " pid=$(ps aux| grep $BIN_DIR/$BIN_NAME | grep $ARGS | awk '{print $2}') "
$cmd
}
if [ $operation == "start" ]; then
recommend_start
elif [ $operation == "stop" ]; then
recommend_stop
elif [ $operation == "restart" ]; then
recommend_stop
sleep 1
recommend_start
else
echo $usage
fi
succ=$?
if [ $succ -eq 0 ]; then
echo recommend $operation accomplished
else
echo recommend $operation failed
fi
该脚本主要实现的功能是,启动,停止,重启服务,停止服务或者重启都需要是去kill掉原来的pid,避免同一个程序运行多个,如果涉及到端口监听,第二次启动就会失败。
3.服务监控
作为一个服务器程序,需要保证后台服务的一直可用,万一出现异常导致服务挂掉了,就需要立即把该服务启动起来,这就需要有个程序来定期的检查该进程是否存在,如果不存在则启动该服务。
linux 提供了crontab定时任务
通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常适合周期性的日志分析或数据备份等工作。
常用参数:
-e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。
-l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内
一般服务都会设置成一分钟检测一次:
$ crontab -e
* * * * * bash run.sh
基本部署的东西也就这么多了。另外有个规范的操作,就是scp新的binary的时候,原来的目录必须做好一定的备份,不要直接覆盖!
4.意外
最最后还有一个点需要关注,上面的步骤做做完后, 基本只需要启动服务就行了,在服务器上把进程启动起来后还是需要关注下内存和cpu信息,如果启动后占用了太多的cpu和内存,撑爆了内存,影响了其他服务的正常运行就粗大事了,所以运行程序前需要对程序的内存和cpu占用做个预估,看是否会有内存不够用的情况,服务启动时,用top命令看下,服务运行情况,直到服务完全启动起来。
linux发布成服务,linux服务简单部署相关推荐
- 编译linux内核成vmlinuz,Linux内核编译与安装
原标题:Linux内核编译与安装 Linux内核是一个用C语言写成的,符合POSIX标准的类Unix操作系统,内核是操作系统中最基本的一部分,提供了众多应用程序访问计算机硬件的机制.Linux内核的一 ...
- kong(微服务网关的简单部署)(一)
kong接口的搭建部署 1.简介 2.kong的安装部署 2.0 直接安装 2.1 使用yum仓库安装(下载最新版本) 2.2 docker安装kong 2.2.1 安装docker 2.2.2 安装 ...
- 如何将linux封装成qcow2,linux系统qcow2镜像的制作
一.简单说明 PS: 最近有客户需要在云平台上部署我们的产品,好久没有做过qcow2镜像了,这里还是把制作流程记录下来. QCOW2镜像格式是Qemu支持的磁盘镜像格式之一.它可以使用一个文件来表示一 ...
- linux 压缩成bz2,linux 将文件压缩成bz2格式 命令:bzip2
bzip2命令用于创建和管理(包括解压缩)".bz2"格式的压缩包.我们遇见Linux压缩打包方法有很多种,以下讲解了Linux压缩打包方法中的Linux bzip2命令的多种范例 ...
- linux改成微内核,Linux内核支持可以裁减的功能,因此它属于微内核架构。()
短文理解听力原文: The Chinese currency is the Renminbi. China has maintained a unified managed floating exch ...
- arcgis xml 下载 切片_切片文件发布成切片服务
一.需求背景: 最近碰到这样的需求,就是手头拥有他人给的切片文件,但是想在自己服务器中将该切片文件发布成切片服务.如何实现? 二.解决办法: 此类需求是非常常见的,arcgis server 提供了S ...
- ASP.NETCore微服务(七)——【docker部署linux上线】(ECS+linux+docker+API上线部分)
ASP.NETCore微服务(七)--[docker部署linux上线](ECS+linux+docker+API上线部分) 对应练习sql下载路径(0积分):[ASP.NETCore微服务(一)-- ...
- Linux系统工程师--(1)Vsftpd服务的部署及优化与linux中内核级加强型火墙的管理
Linux系统工程师 实验所用系统为Redhat-rhel8.2. 目录 Linux系统工程师 Linux的系统工程师--Vsftpd服务的部署及优化 一.ftp介绍 二.vsftpd安装及启用 三. ...
- 【Linux】循序渐进学运维-服务篇-LNMP环境部署
文章目录 前言 一. LNMP的介绍 二. 什么是Fast-CGI 三. 部署实战 1. 安装php和mysql 2. nginx和php的结合 a. 编译nginx b. 配置nginx与php的结 ...
最新文章
- 最简单java设计模式:工厂方法模式
- 浅析SQL Server数据库中的伪列以及伪列的含义
- WebRTC系列之音频的那些事
- 详解 WebRTC 高音质低延时的背后 — AGC
- 十六个 HTML,CSS,jQuery,WordPress等快速启动项目样板
- 深度学习之卷积神经网络(6)梯度传播
- 因子分析累计贡献率_spss教程:因子分析
- Windows系统内置测试工具(winsat)
- 埃氏筛法求区间内素数并输出
- Chromium浏览器不能播放MP4
- 用python计算个人所得税计算器_教你使用Python实现新个税计算器
- XMU 1613 刘备闯三国之三顾茅庐(一) 【并查集】
- 三星c7语言设为英文,三星C7手机如何更改显示语言?简单几步就可轻松搞定!
- java惊魂_我的世界孤儿院惊魂
- 将自己训练的MASK-RCNN模型用于摄像头实时检测
- 绕过content-type检测文件类型上传webshell
- uniapp height高度 100% 无效的问题
- laravel安装的几种方法总结
- LV6TCP编程API
- 塞梅普雷斯 如是说 (第一部/17.选择的权利) (草)
热门文章
- eBPF for Windows开源项目
- 物联网开发- Arduino 101/Genuino 101
- html 圆饼画布,html5 canvas画饼
- 【机器人】四元数与旋转矩阵的转换关系
- Bootstrap 提示工具(Tooltip)弹出框
- mysql慢日志分析工具_mysql慢查日志分析工具 percona-toolkit
- JScript.NET(JScript 8.0)编程简介
- 动态sql防止报错的写法 当判断语句都是null时候会报错 需要手动添加一个判断语句 一般id都会存在...
- Scrapy入门操作
- Shiro笔记(二)Shiro集成SpringMVC的环境配置