Windows/Linux 创建开机启动服务

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

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
<service>
  <id>frps</id>
  <name>Frp Server</name>
  <description>My Frp Server</description>
  
  <executable>C:\Tools\Frp\frps.exe</executable>
  <arguments>-c "C:\Tools\Frp\config\frps.ini"</arguments>
</service>
  • start_frpc.xml
<service>
  <id>frpc</id>
  <name>Frp Client</name>
  <description>My Frp Client</description>
  
  <executable>C:\Tools\Frp\frpc.exe</executable>
  <arguments>-c "C:\Tools\Frp\config\frpc.ini"</arguments>
</service>

配置说明:

  • 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更多用法和说明就不写了。以上几个命令用于操作系统服务足够。


除非注明,否则均为"攻城狮·正"原创文章,转载请注明出处。
本文链接:https://engr-z.com/314.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,736评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,167评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,442评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,902评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,302评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,573评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,847评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,562评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,260评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,531评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,021评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,367评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,016评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,068评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,827评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,610评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,514评论 2 269

推荐阅读更多精彩内容