CentOS7 需要在开机时执行一个一次性脚本,请问如何操作?

2022-10-18 10:27:09 +08:00
 LxnChan

现有一个一次性脚本,需要在开机时以特定用户和组执行(执行后该脚本相当于以后台守护的方式执行)。

现在有以下几种方案:

  1. rc.local:写进去是写进去了但是不知道为什么死活不生效。
  2. SystemD:创建了 Service 配置文件,但是会报错,也没有正确启动。

目前已经确认的是rc.local已经加了对应的权限:

[root@testbench-C ~]# ll /etc/rc.local
lrwxrwxrwx. 1 root root 13 Sep 18 23:46 /etc/rc.local -> rc.d/rc.local
[root@testbench-C ~]# ll /etc/rc.d/rc.local
-rwxr--r--. 1 root root 542 Oct 17 22:04 /etc/rc.d/rc.local

SystemD 配置文件:

[Unit]
Description=myservice
After=syslog.target
After=network.target

[Service]
Type=oneshot
User=myuser
Group=myuser
ExecStart=/home/tsh2/my.sh start

[Install]
WantedBy=multi-user.target
3892 次点击
所在节点    Linux
28 条回复
yanqiyu
2022-10-18 13:55:53 +08:00
LxnChan
2022-10-18 14:27:19 +08:00
@doubtlhy @zer0z 麻烦审题,已经给过权限了,而且我也贴出对应文件的权限了
@ysc3839 因为这脚本并非是一直运行的那种,脚本内实现的是类似于 nohup 的原理,因此正常来说脚本确认程序已在后台运行就会自动退出。现在的情况是脚本返回正常运行了,但是从脚本启动的后台程序并没有在运行。
@yanqiyu 我现在也是觉得是这个原因,惭愧的是我看的也是这篇文档
---
@zerone0086 @eason1874 谢谢,是有效的,确实依 6 楼和 15 楼所说 rc-local 也是个服务。
---
@bao3 确实,感觉现在这个 rc-local 有点脱裤子放屁了,本身是控制自启的脚本,居然还得先开启自启脚本的自启动。
cattyhouse
2022-10-18 14:44:19 +08:00
没看出来你解决了什么

需要在开机时以特定用户和组执行

用 local ,权限解决了?

你这种情况 用特定用户和组的 crontan @reboot 是最佳答案。16f
LxnChan
2022-10-18 14:47:45 +08:00
@cattyhouse 权限可以解决啊

```sh
su - <user> -c '/home/tsh2/my.sh start'
```
julyclyde
2022-10-18 16:01:21 +08:00
@LxnChan 有些脚本是 root 权限初始化,再降级运行实际服务程序的
这种情况不能直接指定以低权限运行

转 systemd 的话,需要费点心改写
LxnChan
2022-10-18 17:10:05 +08:00
@julyclyde 确实,不过其他解决方案上面也说了,对应用户的 crontab 或者干脆 systemd
ysc3839
2022-10-18 17:14:48 +08:00
@LxnChan 那你应该把脚本改成持续运行的模式
zuijiapangzi
2022-10-21 15:18:45 +08:00
开头把环境变量协商。
#!/bin/bash
在加载下 /etc/profile
source /etc/profile

rc.local 的权限需要确认。很多刚安装的系统的这个文件是没有执行权限的。

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

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

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

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

© 2021 V2EX