开机自启脚本
场景
电脑或服务器开机都会有一些需要启动的程序,每次都需要一个一个点击启动,耗时耗力,还有可能漏启动。所以添加一个开机自启的脚本,脚本中帮我们打开需要启动的程序,如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
[Service]
Type=simple
User=hxr
ExecStart= /opt/module/node_exporter-1.2.2/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.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
- 创建.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"
- 将脚本放到系统启动文件夹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