SSHD 启动并运行后如何启动程序

SSHD 启动并运行后如何启动程序

我正在做一个项目,需要在登录提示之前启动 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

重启后,一切都按照我最初的帖子所期望的那样运行。

相关内容