linux设置开机自启动
方式一:使用rc.local文件
在root用户下执行以下操作
- 编辑/etc/rc.local文件,在文件最后面添加需要启动的命令
可以直接执行命令,也可以调用其他的脚本文件
例如 cat /etc/rc.local
cd /usr/ && ./test.sh
- 增加执行权限
chmod +x /etc/rc.d/rc.local
- 确认程序写在exit 0行的前面
- cat /usr/test.sh
su - oracle -c '/home/oracle/orastart.sh' su - root -c '/testapp/bse/etc/rc.start' su - root -c '/testapp/ese/apache-tomcat-8.5.20/bin/startup.sh'
- cat /home/oracle/orastart.sh
lsnrctl start export ORACLE_SID=testora sqlplus /nolog<<EOF connect / as sysdba startup quit EOF
扩展
rc.local是Linux启动程序在login程序前执行的最后一个脚本,系统启动完成后执行
/etc/rc.local是/etc/rc.d/rc.local的软链接
方式二:制作Linux服务并设置开机自启动
在root用户下执行以下操作
- 进入/etc/systemd/system目录
- 新建service文件test.service,并编辑其内容
- 为service文件增加执行权限
chmod +x /etc/systemd/test.service
- 重新加载配置文件
systemctl daemon-reload
- 启动/停止/重启该服务
systemctl start/stop/restart test.service
- 设置/取消开机自启动
systemctl enable/disable test.service
一般建议脚本放在/usr/lib/systemd/system目录下,而在/etc/systemd/system目录下创建对应文件的快捷方式
service文件介绍
在Linux系统中,每个service服务都需要一个对应的service文件
Centos6以前用的都是init来启动服务,Centos7开始默认使用了systemd管理服务
linux下面有两个地方可以放service文件,一个是/lib/systemd/system目录,这个是放系统服务的地方
一般情况下如果是我们自己建立的服务,需要放在/etc/systemd/system文件夹下面,以和系统服务分开
如何编辑service文件内容
以commvault的服务为例
[Unit] Description=commvault Service Requisite=cvunlock.service After=cvunlock.service [Service] EnvironmentFile=/opt/commvault/Base/Temp/Galaxy.env TasksMax=infinity Type=forking ExecStart=/opt/commvault/Base/Galaxy start direct -focus Instance001 ExecStop=/opt/commvault/Base/Galaxy stop direct -focus Instance001 RemainAfterExit=yes KillMode=none LimitNOFILE=262144 [Install] WantedBy=multi-user.target Alias=commvault.service
常用参数说明
[Unit]中
Description表示service的描述
Requires表示"强依赖"关系,即必须满足某个条件或服务启动之后才能运行本服务。Wants字段表示"弱依赖"关系,即使所依赖的服务停止或失败,也不影响service的运行。注意,Wants字段与Requires字段只涉及依赖关系,与启动顺序无关,默认情况下是同时启动的。
After指定service应该在哪些其他服务启动之后才启动,例如network.target。相应地,还有一个Before字段,定义service应该在哪些服务之前启动。注意,After和Before字段只涉及启动顺序,不涉及依赖关系
[Service]中
ExecStart表示service的启动命令
ExecStop表示service的关闭命令
User和Group指定服务运行的用户和组
Restart表示服务在故障后是否应该自动重启
ExecReload字段表示重启服务时执行的命令
启动类型Type字段定义启动类型:
simple(默认值):ExecStart字段启动的进程为主进程
forking:ExecStart字段将以fork()方式启动,此时父进程将会退出,子进程将成为主进程
oneshot:类似于simple,但只执行一次,Systemd 会等它执行完,才启动其他服务
[Install]中
WantedBy指定服务应该在哪个target中启动
service文件中的参数对大小写敏感
一般情况下,只需要重点关注ExecStart项,需要修改为对应脚本的路径和名字
enable命令的原理
linux系统自启动目录为/etc/systemd/system/multi-user.target.wants/
当执行一条systemctl enable test.service
命令后,会在/etc/systemd/system/multi-user.target.wants/这个linux系统自启动目录下为/etc/systemd/system/test.service文件新建一个软链接快捷方式,从而让test.service服务可以开机启动
参考链接:https://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具