我正在做一个项目,需要在登录提示之前启动 GUI。我在 12.10 下可以运行这个,但今天我迁移到了 14.04,它出现了问题。此时,我已将 Grub 配置为以文本模式启动,并在 /etc/init.d 目录中编写了一个脚本 S99StartProgram,在我运行后,该脚本将放置在 /etc/rcS.d 中:
update-rc.d StartProgram start 99 S .
脚本顶部的标题是:
### BEGIN INIT INFO
# Provides: VTTI_StartProgram
# X-Start-Before: x11-common
# Required-Start: $remote_fs $network $syslog $sshd
# Required-Stop: $remote_fs $network $syslog $sshd
# Default-Start: S
# Default-Stop:
# Short-Description: Start Software at Boot Time
# Description: Debian init Script to Start Software at Boot Time
### END INIT INFO
该脚本似乎可以正常工作,但是,它在 sshd 之后无法启动,这意味着一旦程序 XSession 启动,我就无法通过 SSH 进入系统。我尝试运行:
service --status-all
这为我提供了输出:
[ + ] acpid [ - ] anacron [ - ] apparmor [ ? ] apport [ - ] avahi-daemon [ + ] bluetooth [ - ] brltty [ ? ] console-setup [ + ] cron [ + ] cups [ + ] cups-browsed [ - ] dbus [ ? ] dns-clean [ + ] friendly-recovery [ - ] grub-common [ ? ] irqbalance [ + ] kerneloops [ ? ] killprocs [ ? ] kmod [ ? ] lightdm [ ? ] networking [ ? ] ondemand [ ? ] pppd-dns [ - ] procps [ - ] pulseaudio [ ? ] rc.local [ + ] resolvconf [ - ] rsync [ + ] rsyslog [ + ] saned [ ? ] screen-cleanup [ ? ] sentigs [ ? ] Speech-dispatcher [ - ] ssh [ - ] sudo [ - ] udev [ ? ] umountfs [ ? ] umountnfs.sh [ ? ] umountroot [ - ] unattended-upgrades [ - ] urandom [ - ] x11-common
我也尝试过跑步:
service ssh stop
我仍然可以通过 ssh 进入该设备。
我遇到的唯一其他启动系统是 systemd,但从我读过的内容来看(尽管 Ubuntu 上有大量 systemd 目录)Ubuntu 并不开箱即用 systemd。
有人能解释一下发生了什么吗?sshd 从哪里运行?我该如何让脚本等到它完成后再运行?
提前致谢!!
答案1
init.d 脚本与 update-rc.d 结合使用无法实现我想要的系统行为。我最终学习了更多关于 UpStart 的知识,它似乎是在 Ubuntu 上启动程序的主要方法。
我在 /etc/init 中创建了这个脚本作为 start_program.conf:
description "Start Program"
author "Anonymous"
start on started JOB=ssh
script
ifconfig can0 up
exec /full/path/to/program &
end script
然后我只需要运行命令:
initctl reload-configuration
重启后,一切都按照我最初的帖子所期望的那样运行。