文章目录
- linux设置开机启动有几种方法
- 1. 编辑rc.loacl脚本
- 2. 把程序添加为系统服务
- 2.1 创建程序的系统文件
- 2.2 设置开机启动
- 3. 不好用的方法
linux设置开机启动有几种方法
设置linux开机启动有3种方法
1. 编辑rc.loacl脚本
linux在开机启动的时候会运行/etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
printf "My IP address is %s\n" "$_IP"
fi
##在 下面添加要开机启动的程序和脚本即可
sudo nohup /home/pi/frp/start.sh &
## 注意的地方是,要加上&,让程序在后台运行,如果你的程序是死循环那种,就进不去系统了,尽量也加上nohup。
exit 0
这个方法,虽然简单,但是我发现不是所有程序都能这样,放到启动脚本中就能开机启动,我曾经写过几个程序进行开机启动设置,但发现开机后程序并没有运行起来,这就是让我很纳闷的原因,下面是我从网上找的分析原因,但经过测试还是无法开机启动。
- /etc/rc.local没有执行权限,修改权限之后,还是无法解决(网上有人说可以)
- 路径没有编写绝对路径(这个有可能,但是发现绝对路径正确了,我的程序还是没有开机启动)
- sh兼容性问题,重新进行软链接(参考https://www.mmuaa.com/post/4e728a88a1a68e13.html)
最后都没运行起来。然后我猜想,是不是因为系统其实还没有完全跑起来。到时我的程序不能运行,基于这一点,我做了一下延时
sleep(10)
sudo nohup /home/pi/frp/start.sh &
果然这次程序运行起来了,虽然没有发现真正的原因。暂时没发现有程序没有跑起来,暂时这么解决。
2. 把程序添加为系统服务
2.1 创建程序的系统文件
cd /usr/lib/systemd/system
sudo nano frp.service #命名按照**.service定义
复制一下内如
[Unit]
Description=The nginx HTTP and reverse proxy server
After=network.target remote-fs.target nss-lookup.target
#对你程序的描述
[Service]
Type = simple #参看下面给出的链接
ExecStart = /home/pi/frp/frpc -c /home/pi/frp/frpc.ini #修改为你程序的绝对路径即可
下面是官网系统程序配置解释
https://www.freedesktop.org/software/systemd/man/systemd.service.html
下面是我配置的demo,可以参考
[Unit]
Description=frpc
Wants=network-online.target
After=network.target network-online.target
Requires=network-online.target
[Service]
ExecStart=开机启动程序的路径
ExecStop=/bin/kill $MAINPID
Restart=always
RestartSec=5
StartLimitInterval=0
[Install]
WantedBy=multi-user.target
2.2 设置开机启动
sudo systemctl disable frpc
sudo systemctl enable frpc
sudo systemctl start frpc
3. 不好用的方法
新建bash脚本放在/etc/profile.d,此文件为系统的每个用户设置环境信息。
当用户第一次登录时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置。