我已经为此苦苦挣扎了足够长的时间来问另一个启动脚本问题。
我有一个相对简单的启动脚本,即:
### BEGIN INIT INFO
# Provides: startVNC
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start VNC server at boot time
# Description: Test
### END INIT INFO
#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""
/usr/bin/vncserver -geometry 1280x1024 -depth 24
显然只有最后一行才是真正重要的。该脚本是可执行的,即。
ls -l startVNC
产量:
-rwxr-xr-x 1 root root 406 2011-12-07 15:45 startVNC
当我在 vncserver 启动时通过 ssh 登录并执行它时my_user
,我可以从桌面看到 GUI。然后我尝试了 5 件事让它在启动时运行:
- 将我的脚本复制到
/etc/init.d/
,调用update-rc.d -f startVNC defaults
(也使用99
afterdefaults
以确保vncserver
依赖的所有内容都已在运行)。我检查了文件夹中所有生成的符号链接/etc/rcX.d/
。但它在重新启动或启动时不起作用 - 将我的脚本添加到
/etc/rc.local
之前exit 0
- 添加到
crontab -e
作为@reboot /home/my_user/scripts/startVNC
- 将我的脚本添加到
/etc/init.d/rcS
- 将我的脚本添加到 Gnome 中的系统 -> 首选项 -> 启动应用程序
但它们都不起作用。我还能检查什么。我的脚本可能有错误吗?我想进程的所有者必须是my_user
它才能工作,但我不知道如何调试它。
任何线索表示赞赏。
答案1
你可以使用su
[您的用户名]-c /usr/bin/vncserver
以用户身份而不是 root 身份运行 vncserver。
另一点:在您的脚本中,启动和停止 VNC 服务器没有区别。通常,初始化脚本会使用不同的情况来启动/停止服务:
case "$1" in
start)
# code to start the application
;;
stop)
# code to stop the application
;;
restart)
$0 stop
$0 start
;;
esac
这里这是一个如何使用 init 脚本启动 vnc 服务器的详细示例。
答案2
好,我知道了。问题是:
- 通常会发生的以 root 身份运行我的脚本是行不通的。这就是为什么有必要使用
su [my_user] -c
选项需要使用引号,即。
su my_user -c “/usr/bin/vncserver -几何 1280x1024 -深度 16”
我还添加了
. /lib/lsb/init-functions
-exit 0
不知道这些是否有必要,但可以肯定它们不会造成任何伤害。只是从提供的详细示例中复制了这些内容托胡瓦沃胡。
所以我最终得到:
### BEGIN INIT INFO
# Provides: startVNC
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
# Short-Description: Start VNC server at boot time
# Description: A sophisticated script to do the job.
### END INIT INFO
#!/bin/sh
echo "JOB RUN AT $(date)"
echo "============================"
echo ""
. /lib/lsb/init-functions
su my_user -c "/usr/bin/vncserver -geometry 1280x1024 -depth 16"
exit 0
效果很好。当然,使用上面引用的精心设计的脚本可能会更好。我通过以下方式将脚本添加到启动中:
sudo update-rc.d -f startVNC start 99 2 3 4 5 .
因为我没有看到任何理由在关闭时运行任何东西(除了日志记录,我没有这样做)。
另请参阅关于 shebang(以 # 开头的行!)在我原来的问题下被放错位置的评论。但它确实有效,所以我不想在这里包含未经测试的代码。如果您想使用它,您可能应该更改它。