请问 Linux 如何将需要./才能运行的脚本添加到/etc/rc.local 实现开机启动

2017-04-21 14:23:10 +08:00
 openbaby
有个小脚本 speed 是必须手动输入 nohup ./speed 才能后台运行,现在我想将它加入到 /etc/rc.local 实现开机自启,
请问该在 /etc/rc.local 里怎么写呢?

另外,如何将这个脚本写成系统服务,实现启动重启停止呢?
3931 次点击
所在节点    Linux
23 条回复
openbaby
2017-04-21 14:35:19 +08:00
我当前的办法是在 /etc/rc.local 里写为
nohup /root/speed &
但是不生效
ys0290
2017-04-21 14:39:23 +08:00
rc.local 里面不需要 nohup
fengfisher2
2017-04-21 14:41:09 +08:00
你加 x 权限就可以了。
chmod 755 xxx.sh
openbaby
2017-04-21 14:44:17 +08:00
@ys0290 这个脚本运行时会调用一个 json 文件,现在提示
Open config file failed: open ./speed.json: no such file or directory
是不是还要给这文件什么权限才能一并开机调用起来呢?
fengfisher2
2017-04-21 14:44:50 +08:00
"另外,如何将这个脚本写成系统服务,实现启动重启停止呢?"百度一下就有了。
因为 1 ,你要在脚本里面添加选项,因为不知道你怎么写的,所以方法很多。
2 ,也不太明白,你说的系统服务是指 /etc/init.d/下面调用脚本呢?还是加到 service 里面,还是你想直接 chkconfig 这里开机启动。
jarlyyn
2017-04-21 14:45:50 +08:00
写个脚本
cd 过去
lianz
2017-04-21 15:04:43 +08:00
cd /path/to/work
./start.sh
istek999
2017-04-21 16:11:59 +08:00
./的脚本,我如果没有理解错,应该是当前用户下的脚本吧。
两种方式:
rc.local
/path/to/work/start.sh

rc.local
su - 'someuser' -c '/path/to/work/start.sh'
SharkIng
2017-04-21 17:35:21 +08:00
用绝对路径
allenshi
2017-04-21 18:15:44 +08:00
cd /脚本所在路径
./speed
cd -

直接写在 /ect/rc.local 里面
kmahyyg
2017-04-21 18:20:55 +08:00
nohup /root/run.sh >> /dev/null 2>&1 &
babytomas
2017-04-21 18:36:51 +08:00
`.` 只是代表`当前`,你的 ./ 其实只是当前目录、并非`运行`命令。

你在这个文件的目录执行 `pwd` 查看当前的路径,然后把文件绝对地址加入 rc.local 即可。

例如我 root 下面有 test.sh 文件,你进入 root 的时候可以 ./test.sh ,但在 rc.local 中输入 /root/test.sh 即可。
snip
2017-04-21 18:49:56 +08:00
centos7 和 Ubuntu16 下面,要给 rc.local 加执行权限

chmod 755 /etc/rc.local
megachweng
2017-04-21 19:12:15 +08:00
估计 no such file 是因为你没写完整的目录,或者先 cd 到那个 json 目录下
ik
2017-04-21 19:44:35 +08:00
chmod +x /home/speed
echo '/home/speed' >> /etc/rc.local
Shintaku
2017-04-21 21:39:24 +08:00
新建一个`/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]里加入相应的命令
fuge
2017-04-22 05:58:56 +08:00
@Shintaku 这是正解
julyclyde
2017-04-22 07:48:30 +08:00
哈,这是 javaer 常见的问题
julyclyde
2017-04-22 07:49:13 +08:00
@Shintaku 应该 Type=Simple 而且不加&
&这个是给 shell 做 job control 用的符号,在 systemd 里是没用的
msg7086
2017-04-22 15:31:47 +08:00
@Shintaku 我记得可以设工作目录吧?不一定要用全路径。

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

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

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

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

© 2021 V2EX