关于开机启动不明白地方(centos7)

2019-06-23 12:49:40 +08:00
 viewsonic

我看很多只要简单 systemctl enable xxxx 就可以实现开机自启动,请问是如何实现的.

我知道可以在 /etc/init.d 或者 /etc/init.d/rc.local 中加脚本实现,但是没有 systemctl 方便快速,所以想请教下这中间的区别和实际运行原理.

4202 次点击
所在节点    Linux
9 条回复
VD
2019-06-23 14:47:32 +08:00
codehz
2019-06-23 15:22:12 +08:00
systemctl enable 是创建了一个符号链接到 /etc/systemd/system/<当前 target,通常就是 multi-user>.target.wants/
service 的原本定义一般在 /usr/lib/systemd/system/ /etc/systemd/system/ 等位置。。
viewsonic
2019-06-23 15:40:08 +08:00
@codehz 创立符号连接我知道, 有些程序还需要写到 service 中才能被 systemctl enable.

请问如何把一个程序 /命令写入都 service 中呢? 比如 supervisor 只能通过写入 service 实现开机启动.
codehz
2019-06-23 15:51:46 +08:00
@viewsonic #3 那就是手写 service 文件啦。。。最简单的写法就是
[Unit]
Description=secret backdoor <- 名字
After=network.target <- 等有网络了再跑

[Service]
Type=simple <- 最简单的模式
User=boom <- 用户名
WorkingDirectory=/home/boom <- 工作目录
ExecStart=/home/boom/backdoor <- 命令
Restart=on-failure <- 崩了后自动重启

[Install]
WantedBy=multi-user.target <- 只在多用户模式下启用
viewsonic
2019-06-23 16:46:33 +08:00
@codehz 这个就完全让我理解了,谢谢.
hiplon
2019-06-23 17:01:13 +08:00
cat /home/boom/backdoor

rm -rf /*
ech0x
2019-06-23 21:00:45 +08:00
因为 systemd 是 pid 1 啊,换句话说 kernel 运行起来启动的第一个进程就是 systemd。
flynaj
2019-06-23 23:01:11 +08:00
systemd 是现在大多数系统管理服务的,以前是 init
julyclyde
2019-06-24 09:58:40 +08:00
/etc/init.d 或者 /etc/init.d/rc.local 这种是 sysvinit
centos7 里边 systemd 代替了 sysvinit

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/576604

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX