系统服务是一种应用程序类型,它在后台运行。服务应用程序通常可以在本地和通过网络为用户提供一些功能。有些软件无需安装解压就能使用,或者在安装时未向系统注册服务。如果我们需要开机启动,需要手动创建服务。

Windows系统篇

相对于在注册表中创建开机启动程序,服务具有优先级高,权限大,无需账户登录即可启动的优点。

和计划任务相比,服务可以手动停止,重启。而计划任务是周期性作业,只能按设定的规则执行一次或循环执行。

WinSW是一款开源免费,用于创建Windows服务的工具,项目地址:https://github.com/winsw/winsw

dc096911f30087316ce08940aa1653d2.png

Win10选择WinSW.NET461,低版本系统如Win7选择NET4,XP选择NET2。如果本机没有.NET框架的可以下载带.NET的版本。sample-allOptions.xml是完整示例配置文件,一般我们下载sample-minimal.xml最小化示例配置文件。

需要注意的是,每一个启动服务对应一个winsw程序,制作成服务后winsw.exe和相应配置文件不可删除。

示例:

在Win10上配置frp服务端和客户端开机启动。新建frp文件夹,复制2个WinSW.NET461.exe副本,命名为start_frps.exe和start_frpc.exe,复制2个sample-minimal.xml副本,命名为start_frps.xml和start_frpc.xml。(exe程序和xml配置文件名要一至)。

start_frps.xml

frps

Frp Server

My Frp Server

C:\Tools\Frp\frps.exe

-c "C:\Tools\Frp\config\frps.ini"

start_frpc.xml

frpc

Frp Client

My Frp Client

C:\Tools\Frp\frpc.exe

-c "C:\Tools\Frp\config\frpc.ini"

配置说明:

id:指定在Windows系统内部使用的识别服务的ID。在系统中安装的所有服务中必须是唯一,它应该完全由字母数字字符组成。

name:服务的简短名称,它可以包含空格和其他字符。

description:该服务可读描述。当选中该服务时,它将显示在Windows服务管理器中。

executable:该元素指定要启动的可执行文件。它可以是绝对路径,也可以指定可执行文件的名称,然后从环境变量“PATH”中搜索(需要注意的是,服务经常在不同的用户账户中运行,因此它可能需要有不同于你设置在环境变量Path中的路径)。

arguments:启动参数,可选。

在开始菜单点右键,用管理员身份打开PowerShell,定位到frp目录。

c4a2ef22e1fc19ae60fb410c360e24f9.png

执行:

start_frps.exe install

start_frpc.exe install

efa5a5a4a73843f2345e57f1248c9be5.png

打开services.msc,可以看到服务已安装成功。

930db2e48ea77aa87d7a8a68957a8b98.png

可以设为自动启动。

如果需要删除服务,在frp目录中执行:

start_frps.exe uninstall

start_frpc.exe uninstall

Linux系统篇

如果仅仅只需要开机启动,直接把执行代码写在 /etc/rc.local 中即可。有些发行版不存在该文件,手动建立,并设为可执行权限即可。

rc.local 文件:

#!/bin/bash

// ...执行代码

文件权限设为可执行:chmod 755 /etc/rc.local

言归正传,Linux创建服务如下:

方法一

在 /etc/init.d 中创建文件,如:tomcat,并设为可执行权限。

文件内容:

#!/bin/bash

#

### BEGIN INIT INFO

# Provides: engr-z

# Required-Start:

# Required-Stop:

# Should-Start: $network $time

# Should-Stop: $network $time

# Default-Start: 3 4 5

# Default-Stop:

# Short-Description:

# Description:

### END INIT INFO

#

export CATALINA_HOME="tomcat目录"

export CATALINA_BASE="实例目录instance"

case "$1" in

start)

if [ -f $CATALINA_HOME/bin/startup.sh ];then

echo "start tomcat ..."

$CATALINA_HOME/bin/startup.sh

fi;;

stop)

if [ -f $CATALINA_HOME/bin/startup.sh ];then

echo "stop tomcat ..."

$CATALINA_HOME/bin/shutdown.sh

fi;;

*)

echo $"Usage: $0 {start|stop}"

exit 1;;

esac

文件### BEGIN INIT INFO和### END INIT INFO之间的声明是必须的,给出了服务启动时依赖的服务和运行级别。

执行以下命令,让系统开机加载脚本:

update-rc.d defaults 99

方法二(推荐)

现在主流Linux发行版启动都交给systemctl管理(旧的用chkconfig管理),配置起来简单很多,不需要对Linux服务启动原理过多了解。

systemctl脚本存放在:/usr/lib/systemd/,有系统(system)和用户(user)之分,像需要开机不登陆就能运行的程序,就将程序存在系统服务里,即:/usr/lib/systemd/system 目录下。

该目录下的服务有以service结尾的,也有target结尾的。

service :守护进程的启动、停止、重启和重载是此类 unit 中最为明显的几个类型。

target :此类 unit 为其他 unit 进行逻辑分组。它们本身实际上并不做什么,只是引用其他 unit 而已。这样便可以对 unit 做一个统一的控制。

配置文件一般会分为3部分:[Unit]、[Service]和[Install]

[Unit] # 主要是服务说明

Description=test # 简单描述服务

After=network.target # 描述服务类别,表示本服务需要在network服务启动后在启动

Before=xxx.service # 表示需要在某些服务启动之前启动,After和Before字段只涉及启动顺序,不涉及依赖关系。

[Service] # 核心区域

Type=forking # 表示后台运行模式。

User=user # 设置服务运行的用户

Group=user # 设置服务运行的用户组

KillMode=control-group # 定义systemd如何停止服务

PIDFile=/usr/local/test/test.pid # 存放PID的绝对路径

Restart=no # 定义服务进程退出后,systemd的重启方式,默认是不重启

ExecStart=/usr/local/test/bin/startup.sh # 服务启动命令,命令需要绝对路径

PrivateTmp=true # 表示给服务分配独立的临时空间

[Install]

WantedBy=multi-user.target # 多用户

以下是我在Linux下frps启动服务脚本(frps.service):

[Unit]

Description=frps service

Requires=network.target network-online.target

After=network.target network-online.target

[Service]

Type=simple

PIDFile=/tmp/frps.pid

ExecStart=/opt/frp/frps -c /opt/frp.conf/frps.ini

ExecReload=/bin/kill -s HUP $MAINPID

ExecStop=/bin/kill -s QUIT $MAINPID

PrivateTmp=true

[Install]

WantedBy=multi-user.target

1ccd48fca75be4b8e057b5bab12d4bc4.png

systemctl 提供了一组子命令来管理单个的 unit,其命令格式为:

systemctl [command] [unit]

示例:

systemctl daemon-reload # 重载系统服务

systemctl enable *.service # 设置某服务开机启动

systemctl start *.service # 启动某服务

systemctl stop *.service # 停止某服务

systemctl reload *.service # 重启某服务

由于篇幅有限,systemctl更多用法和说明就不写了。以上几个命令用于操作系统服务足够。

linux自动启动network服务,Windows/Linux 创建开机启动服务相关推荐

  1. ubuntu16创建开机启动服务

    1.cd /etc/init.d/ 2.sudo touch zookeeper(举例) 3.给服务赋权限:sudo chmod +x zookeeper 4.执行sudo vim zookeeper ...

  2. 【C#】WinForm 之 SQL Server 服务监控器(避免开机启动服务)

         由于刚刚开始写博客加上最近人又懒,很多过去的项目都没时间去整理,先把以前写过的一个小工具发上来吧. 关于MS-SQL服务优化 安装过MS-SQL Server的人应该知道,系统会因此多出4. ...

  3. linux启动设置运行级别,Linux的运行级别和设置开机启动服务的方式

    Linux的运行级别 什么是运行级别呢?简单点来说,运行级别就是操作系统当前正在运行的功能级别.级别是从0到6,具有不同的功能.这些级别定义在/ect/inittab文件中.这个文件是init程序寻找 ...

  4. linux自定义开机启动服务和chkconfig使用方法

    文章转载! linux自定义开机启动服务和chkconfig使用方法 1. 服务概述 在linux操作系统下,经常需要创建一些服务,这些服务被做成shell脚本,这些服务需要在系统启动的时候自动启动, ...

  5. linux开机启动服务详解

    http://blog.163.com/sjt_linux/blog/static/19931031920126295452884/ linux开机启动服务详解(转) 2012-07-29 17:45 ...

  6. Linux 添加开机启动服务

    一.开机启动 对于那些支持 Systemd 的软件,安装的时候,会自动在/usr/lib/systemd/system目录添加一个配置文件. 如果你想让该软件开机启动,就执行下面的命令(以httpd. ...

  7. Linux minilogd占用内存过高及开机启动项修改

    minilogd: 今天发现一台服务起的内存正常占用应该在70左右,但是内存占用却到了90%以上,用top查看发现minilogd占用了30%左右的内存,是不符合预期的,查看开机启动项并无minilo ...

  8. CentOS 7添加开机启动服务/脚本

    CentOS 7添加开机启动服务/脚本 一.添加开机自启服务 在CentOS 7中添加开机自启服务非常方便,只需要两条命令(以Jenkins为例): systemctl enable jenkins. ...

  9. centos 开机启动java_Centos 7将java jar包自定义开机启动服务

    Centos 7将java jar包自定义开机启动服务 1. 先上 jar包的启动脚本 vim service.sh #!/bin/bash # 需要变更的参数 # 先查看java绝对路径:which ...

最新文章

  1. 关于思科网际操作系统漏洞情况的通报
  2. 杭电多校第十场 hdu6434 Count 欧拉函数打表 快速打表模板
  3. 3D数学读书笔记——矩阵进阶
  4. c语言++数组名【数字】_C ++程序在数组中打印所有非重复数字
  5. Win10系统java环境配置
  6. 9. 设计二个函数分别计算sinx和cosx_【数组分享】PHP函数array_udiff_assoc ()分享(20201128)...
  7. DI(destination imagination)活动
  8. 【redis】分布式锁实现,与分布式定时任务
  9. 服务器虚拟化相关问题分析,服务器虚拟化中遇到的存储问题分析
  10. matlab建模与仿真应用pdf,MATLAB建模与仿真应用教程 第2版
  11. python实战-网站扫码登录流程全解析
  12. 多线程编程warning: cast to pointer from integer of different size [-Wint-to-pointer-cast] 错误解决
  13. 学校选课系统服务器繁忙,大学选课没选到怎么办
  14. Streaming Telemetry翻译学习
  15. FM模型及其在推荐系统中的应用
  16. 大数据营销模型思路架构
  17. Tomcat项目部署方式
  18. Clickhouse系统表简介
  19. JS 判断浏览器版本
  20. 酒浓码浓 - canvas标签

热门文章

  1. matplotlib color可选
  2. C++设计模式-Prototype原型模式
  3. MyEclipse6.0 安装axis2插件, 调用加密的SAP webservice
  4. v-for中用elementUI实现分页
  5. 【详细教程】教你如何使用Node + Express + Typescript开发一个应用
  6. c语言让电脑发出滴滴声代码,centos命令行控制电脑发出滴滴声——使用beep把警告变为music...
  7. 如何循序渐进的学习javaScript呢,请听我慢慢道来!
  8. ztree java 增删改_Ztree实现增删改查
  9. 指纹识别工具(CMSeek)
  10. oledb excel java_C#中Excel 2016的oledb连接字符串