我想让sslocal
电脑启动后自动启动。然后我附加一行命令,/etc/profile
如下所示/usr/local/bin/sslocal -c /etc/config.json -d start
。但是当我重新启动时,出现错误:Permission denied:/var/run/shadowsocks.pid
。
我知道我附加的脚本需要 root 权限。因为会在 目录下sslocal
写入一个名为 的新文件,当我直接在终端中以 root 用户执行该脚本时,一切顺利。我将其附加到 后似乎没有足够的权限。shadowsocks.pid
/var/run/
/etc/profile
那么,怎样才能让脚本开机自动运行呢?有人建议我编辑/etc/rc.local
,但它不起作用。我的系统是 Ubuntu 16.04,以下是/etc/rc.local
(文件权限为)的内容755
。
#!/bin/dash -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
sudo /usr/local/bin/sslocal -c /etc/shadowsocks.json -d start
exit 0
答案1
我试图在我的电脑上安装影子套接字。我遇到的问题是如何让shadow-socket的服务在我的电脑启动时自动运行。服务启动命令是sudo /usr/local/bin/sslocal -c /etc/shadowsocks.json -d start
(因为该命令会在目录中写入一个新文件/var/run/
,从而导致其sudo
权限)。
解决方案
让脚本随 PC 启动自动运行的最简单方法是将其写入/etc/profile
.因此,就像问题描述的内容一样,我在sudo
上面添加了整个命令行exit 0
线。
检查是否有效
重新启动计算机后,在终端中输入以下命令sudo systemctl status rc-local.service
。如果 sslocal 命令有效,那么您将得到以下输出:
>rc-local.service - /etc/rc.local 兼容性 已加载:已加载(/etc/systemd/system/rc-local.service;已启用;供应商预设:已启用) 活跃:自 2015 年 11 月 27 日周五 03:19:25 CST 起活跃(运行); 2分39秒前 进程:881 ExecStart=/etc/rc.local启动(代码=退出,状态=0/SUCCESS) CGroup:/system.slice/rc-local.service ─ 887 观看-n 60 su矩阵-c ibam └─1112 /usr/bin/python /usr/local/bin/sslocal -c /etc/shadowsocks....
从最后一行可以看到,sslocal命令在我的机器上创建了一个pid为1112的进程。这意味着shadow-socks客户端运行顺利。