开机自启脚本

场景

电脑或服务器开机都会有一些需要启动的程序,每次都需要一个一个点击启动,耗时耗力,还有可能漏启动。所以添加一个开机自启的脚本,脚本中帮我们打开需要启动的程序,如Snipaste、FRP客户端等。


CentOS

方式一:添加启动命令到rc.local文件中

修改 /etc/rc.local 文件,添加启动服务的命令
先写好启动脚本或者启动命令,事先保证启动脚本或命令能正常启动服务,然后将脚本路径或启动命令添加至/etc/rc.local文件中,这个方法适合比较简单的shell脚本。

方式二:注册服务并设置开机自启

创建脚本myservice,写入

#!/bin/bash

# chkconfig: 234 10 90 
# description: myservice ...

case $1 in
"start")
date >> /tmp/test.txt
echo "service start" >> /tmp/test.txt
;;
"stop")
date >> /tmp/test.txt
echo "service stop" >> /tmp/test.txt
;;
esac

NOTE:其中2345是默认启动级别,级别有0-6共7个级别。

  • 等级0表示:表示关机
  • 等级1表示:单用户模式
  • 等级2表示:无网络连接的多用户命令行模式
  • 等级3表示:有网络连接的多用户命令行模式
  • 等级4表示:不可用
  • 等级5表示:带图形界面的多用户模式
  • 等级6表示:重新启动
  • 10是启动优先级,90是停止优先级,优先级范围是0-100,数字越大,优先级越低。

将脚本放到/etc/init.d或/etc/rc.d/init.d目录下,并添加脚本为服务

chkconfig --add myservice

NOTE:此时调用chkconfig --list myservice命令,得到如下启动等级
myservice 0:off 1:off 2:on 3:on 4:on 5:on 6:off

输入如下命令调用myservice服务,然后查看/tmp下的test.txt文件发现已经写入了日期。

systemctl start myservice

NOTE:对服务的操作就相当于在调用对应的脚本
service httpd 等价 /etc/rc.d/init.d/httpd
service httpd start 等价 /etc/rc.d/init.d/httpd start
service httpd stop 等价 /etc/rc.d/init.d/httpd stop
systemctl start myservice 等价 /etc/rc.d/init.d/myservice start

将myservice服务设置为开机自启

systemctl enable myservice

NOTE:如果启动等级是2345,则已经是开机自启了,可以省略这步。

查看服务是否开机启动

systemctl is-enabled myservice



重启服务器,就会执行systemctl start myservice命令和rc.local中的命令。

方式三

编辑脚本

[Unit]
Description=node_export
Documentation=https://github.com/prometheus/node_exporter
After=network.target
Wants=network.target

[Service]
Type=simple
User=hxr
ExecStart= /opt/module/node_exporter-1.2.2/node_exporter
Restart=on-failure

[Install]
WantedBy=multi-user.target

配置中多个相同配置会选择最后一个;所有的启动设置之前,都可以加上一个连词号(-),表示"抑制错误",即发生错误的时候,不影响其他命令的执行。EnvironmentFile=-/etc/sysconfig/sshd,表示即使 /etc/sysconfig/sshd 文件不存在,也不会抛出错误
[Unit] 启动顺序与依赖关系:
Description:当前服务的简单描述;
Documentation:指定 man 文档位置;
After:如果network.target 需要启动,那么 sshd.service 应该在它们之后启动;
Before:定义 本服务 应该在哪些服务之前启动。After 和 Before 字段只涉及启动顺序,不涉及依赖关系;
Wants:表示 network.target 之间存在"弱依赖"关系,即如果"network.target"启动失败或停止运行,不影响 本服务 继续执行;
Requires:表示"强依赖"关系,即如果该服务启动失败或异常退出,那么 本服务 也必须退出 。 Wants 字段与Requires 字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动。

[Service] 启动行为:
EnvironmentFile:许多软件都有自己的环境参数文件,该字段指定文件路径(注意:/etc/profile 或者 /etc/profile.d/ 这些文件中配置的环境变量仅对通过 pam 登录的用户生效,而 systemd 是不读这些配置的。systemd 是所有进程的父进程或祖先进程,它的环境变量会被所有的子进程所继承,如果需要给 systemd 配置默认参数可以在/etc/systemd/system.conf 和 /etc/systemd/user.conf 中设置。 加载优先级system.conf 最低,可能会被其他的覆盖);
Type:定义启动类型。可设置:simple,exec,forking,oneshot,dbus,notify,idle。
simple(设置了 ExecStart= 但未设置 BusName= 时的默认值):ExecStart 字段启动的进程为该服务的主进程
forking:ExecStart 字段的命令将以 fork() 方式启动,此时父进程将会退出,子进程将成为主进程。
ExecStart:定义启动进程时执行的命令 上面的例子中,启动 sshd 执行的命令是 /usr/sbin/sshd -D $OPTIONS,其中的变量 $OPTIONS 就来自 EnvironmentFile 字段指定的环境参数文件。
ExecReload:重启服务时执行的命令 ExecStop:停止服务时执行的命令 ;
ExecStartPre:启动服务之前执行的命令;
ExecStartPost:启动服务之后执行的命令 ExecStopPost:停止服务之后执行的命令;
RemainAfterExit:设为yes,表示进程退出以后,服务仍然保持执行;
KillMode:定义 Systemd 如何停止服务,可以设置的值如下:
control-group(默认值):当前控制组里面的所有子进程,都会被杀掉 process:只杀主进程 mixed:主进程将收到 SIGTERM 信号,子进程收到 SIGKILL 信号 none:没有进程会被杀掉,只是执行服务的 stop 命令;
Restart:定义了退出后,Systemd 的重启方式。可以设置的值如下: no(默认值):退出后不会重启
on-success:只有正常退出时(退出状态码为0),才会重启
on-failure:非正常退出时(退出状态码非0),包括被信号终止和超时,才会重启 on-abnormal:只有被信号终止和超时,才会重启
on-abort:只有在收到没有捕捉到的信号终止时,才会重启 on-watchdog:超时退出,才会重启
always:不管是什么退出原因,总是重启;
RestartSec:表示 Systemd 重启服务之前,需要等待的秒数

[Install]启动行为:
WantedBy:表示该服务所在的 Target(服务组) 。关于 Target,运行级别结果为 multi-user.target,表示默认的启动 Target 是multi-user.target。在这个组里的所有服务,都将开机启动。这就是为什么 systemctl enable
命令能设置开机启动的原因。shutdown.target 就是关机状态。常用的 Target 有两个:一个是 multi-user.target,表示多用户命令行状态;另一个是 graphical.target,表示图形用户状态,它依赖于 multi-user.target systemctl isolate shutdown.target。

根据实际情况修改Service中的User和ExecStart的属性,然后将将本放到 /usr/lib/systemd/system/node_exporter.service 路径下。

设为开机自启动
systemctl enable node_exporter.service
会将文件路由到 /etc/systemd/system/multi-user.target.wants/ 目录下

可以通过如下命令查看日志信息
journalctl -u node_exporter -n 10 -f


Windows

  1. 创建.bat脚本,输入启动命令
start /min C:\Users\Administrator\Desktop\frp_0.36.2_windows_amd64\frpc.exe -c C:\Users\Administrator\Desktop\frp_0.36.2_windows_amd64\frpc.ini
start E:\Snipaste\Snipaste.exe
start "" "C:\Program Files (x86)\iNode\iNode Client\iNode Client.exe"
  1. 将脚本放到系统启动文件夹C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup中(或在运行框中输入shell:startup打开用户启动文件夹C:\Users\CJ\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup)

NOTE:frpc.exe启动时会打开cmd窗口,可以加上/min来最小化cmd窗口。


NOTE:Win中没有linux中的nohup(忽略SIGHUP指令)和&(忽略SIGINT指令)命令来挂起程序使其在后台运行,如果希望其在后台运行,可以隐藏窗口。
网上找了以下两种方式,但是都不管用╯﹏╰
方式一:

@echo off
if "%1" == "h" goto begin
mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
:begin
start /min >C:\Users\Administrator\Desktop\frp_0.36.2_windows_amd64\frpc.exe -c >C:\Users\Administrator\Desktop\frp_0.36.2_windows_amd64\frpc.ini
start E:\Snipaste\Snipaste.exe

方式二:
再写一个vbs文件,在该文件中以隐藏的方式启动bat脚本

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

推荐阅读更多精彩内容