网站首页 > 精选教程 正文
系统服务是一种应用程序类型,它在后台运行。服务应用程序通常可以在本地和通过网络为用户提供一些功能。有些软件无需安装解压就能使用,或者在安装时未向系统注册服务。如果我们需要开机启动,需要手动创建服务。
Windows系统篇
相对于在注册表中创建开机启动程序,服务具有优先级高,权限大,无需账户登录即可启动的优点。
和计划任务相比,服务可以手动停止,重启。而计划任务是周期性作业,只能按设定的规则执行一次或循环执行。
WinSW是一款开源免费,用于创建Windows服务的工具,项目地址:https://github.com/winsw/winsw
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目录。
执行:
start_frps.exe install
start_frpc.exe install
打开services.msc,可以看到服务已安装成功。
可以设为自动启动。
如果需要删除服务,在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 #34;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
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
猜你喜欢
- 2024-10-08 开机自启动原理——设置mysql和tomcat开机启动案例分享
- 2024-10-08 技术丨如何任意设置开机启动项? 如何设定开机启动项
- 2024-10-08 Linux 系统启动过程 linux系统启动过程中/etc/rc.d会进行那些操作
- 2024-10-08 各种电脑开机进入启动项的快捷键 各种电脑开机进入启动项的快捷键是哪个
- 2024-10-08 运维工程师必备的技能——Linux 开机启动过程
- 2024-10-08 CentOS7.3 Linux系统中如何查看并设置开机启动项
- 2024-10-08 杂集:centos7中设置服务开机自启的两种方法,欢迎补充
- 2024-10-08 电脑开机启动项在哪里设置?优化系统速度不是梦!
- 2024-10-08 docker解决tomcat时间差及docker开机自启动
- 2024-10-08 电脑无法开机的常见问题 解决方法汇总
你 发表评论:
欢迎- 最近发表
-
- 绝对新惊喜!4款王者级别的办公软件,免费又实用
- 再见WPS!微软新出的免费Office软件,我一用就爱上了
- Deepseek+通义千问,一分钟免费生成PPT
- 手机也能修改PPT?还能投屏?3000万用户的ToDesk有多少人不知道
- 简单!如何用Deepseek制作课件?保姆级教程一遍就懂!
- 你会移动办公吗?iPhone 上的免费 Office 软件长这模样
- 超好用的14款免费视频编辑软件强烈推荐!剪辑达人必备!(2022)
- 一键免费转换PPT、Excel和Word文档,无需下载软件
- DeepSeek +功能扩展,实现一键生成PPT功能,完全免费的。
- 拜拜WPS?微软这款全新的三合一Office,免费无广告,真让人惊艳
- 标签列表
-
- nginx反向代理 (57)
- nginx日志 (56)
- nginx限制ip访问 (62)
- mac安装nginx (55)
- java和mysql (59)
- java中final (62)
- win10安装java (72)
- java启动参数 (64)
- java链表反转 (64)
- 字符串反转java (72)
- java逻辑运算符 (59)
- java 请求url (65)
- java信号量 (57)
- java定义枚举 (59)
- java字符串压缩 (56)
- java中的反射 (59)
- java 三维数组 (55)
- java插入排序 (68)
- java线程的状态 (62)
- java异步调用 (55)
- java中的异常处理 (62)
- java锁机制 (54)
- java静态内部类 (55)
- java怎么添加图片 (60)
- java 权限框架 (55)
本文暂时没有评论,来添加一个吧(●'◡'●)