技术解析

请问 Linux 如何将需要./才能运行的脚本添加到/etc/rc.local 实现开机启动
0
2021-06-30 15:44:03
idczone
有个小脚本 speed 是必须手动输入 nohup ./speed 才能后台运行,现在我想将它加入到 /etc/rc.local 实现开机自启,
请问该在 /etc/rc.local 里怎么写呢?

另外,如何将这个脚本写成系统服务,实现启动重启停止呢?
我当前的办法是在 /etc/rc.local 里写为
nohup /root/speed &
但是不生效

rc.local 里面不需要 nohup

你加 x 权限就可以了。
chmod 755 xxx.sh

这个脚本运行时会调用一个 json 文件,现在提示
Open config file failed: open ./speed.json: no such file or directory
是不是还要给这文件什么权限才能一并开机调用起来呢?

"另外,如何将这个脚本写成系统服务,实现启动重启停止呢?"百度一下就有了。
因为 1 ,你要在脚本里面添加选项,因为不知道你怎么写的,所以方法很多。
2 ,也不太明白,你说的系统服务是指 /etc/init.d/下面调用脚本呢?还是加到 service 里面,还是你想直接 chkconfig 这里开机启动。

写个脚本
cd 过去

cd /path/to/work
./start.sh

./的脚本,我如果没有理解错,应该是当前用户下的脚本吧。
两种方式:
rc.local
/path/to/work/start.sh
rc.local
su - 'someuser' -c '/path/to/work/start.sh'

用绝对路径

cd /脚本所在路径
./speed
cd -
直接写在 /ect/rc.local 里面

nohup /root/run.sh >> /dev/null 2>&1 &

`.` 只是代表`当前`,你的 ./ 其实只是当前目录、并非`运行`命令。
你在这个文件的目录执行 `pwd` 查看当前的路径,然后把文件绝对地址加入 rc.local 即可。
例如我 root 下面有 test.sh 文件,你进入 root 的时候可以 ./test.sh ,但在 rc.local 中输入 /root/test.sh 即可。

centos7 和 Ubuntu16 下面,要给 rc.local 加执行权限
chmod 755 /etc/rc.local

估计 no such file 是因为你没写完整的目录,或者先 cd 到那个 json 目录下

chmod +x /home/speed
echo '/home/speed' >> /etc/rc.local

新建一个`/lib/systemd/system/speed.service`的配置文件
```
[Unit]
Description=speed autostart
[Service]
Type=idle
ExecStart=/usr/bin/sh /绝对路径 /speed &
[Install]
WantedBy=multi-user.target
```
保存后执行
sudo systemctl daemon-reload
sudo systemctl start speed
sudo systemctl enable speed
停止重启可以在[Service]里加入相应的命令

这是正解

哈,这是 javaer 常见的问题

应该 Type=Simple 而且不加&
&这个是给 shell 做 job control 用的符号,在 systemd 里是没用的

我记得可以设工作目录吧?不一定要用全路径。


不要滥用 rc.local 这种 UNIX 时代的历史遗留,最好做成 systemd 服务,这样至少可控可管,当然,设置某些参数那种 OneShow 的除外

推荐在 /etc/systemd/system 建 service,而且 execstart 命令行后不用加&

确实不需要加&
的确 /etc/systemd/system 更科学一些,忘了当初为什么放在 /lib 下了
没有设置过,感觉绝对路径更不容易出错吧

数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服