我希望我的 openSuse 11.1 服务器在启动时运行一个小型 shell 脚本。我创建了一个脚本并在 /etc/init.d/rc5.d/ 中放置了一个指向该脚本的符号链接。然而,脚本并没有被执行。
这是我要运行的脚本:
#!/bin/bash
#monitor RAID array
/sbin/mdadm --monitor --daemonize [email protected] /dev/md0 /dev/md1 /dev/md2 /dev/md3
#start SVN server
/usr/bin/svnserve -d
当我自己从命令行运行该脚本时,该脚本工作正常(svn 服务器和 mdadm 已按预期进行守护程序)。但是重新启动服务器时似乎没有启动。
这可能会帮助您弄清楚我做错了什么:
linuxplug:~ # ls -l /etc/init.d/rc5.d/exe*
lrwxrwxrwx 1 root root 25 May 22 11:43 /etc/init.d/rc5.d/executeatstartup.sh -> /root/executeatstartup.sh
linuxplug:~ # ls -l /root/executeatstartup.sh
-rwxr-xr-x 1 root root 172 Apr 12 13:43 /root/executeatstartup.sh
linuxplug:~ # which svnserve
/usr/bin/svnserve
我究竟做错了什么?
编辑:我已将指向 shell 脚本的链接重命名如下:
linuxplug:~ # ls -l /etc/init.d/rc5.d/
lrwxrwxrwx 1 root root 25 May 22 12:03 S99executeatstartup -> /root/executeatsta
rtup.sh
但是,脚本仍然没有在启动时运行。
您应该将链接命名为 S99something,其中 S 代表开始,99 代表该目录中脚本的启动顺序。查看该目录中的其他链接...
此外:您可能需要重新编写脚本以支持启动/停止参数,并添加 K99something 符号链接以确保在离开此运行级别时服务正确停止。
您是否已经按照 opensuse 网站上列出的步骤进行操作 ?那肯定行得通。
Cool Solutions也有很好的解释
您是否尝试过在 /etc/init.d/boot.local 中添加对脚本的调用?试试看是否效果更好。还有几个其他 boot.* 文件在启动的不同部分运行。
您应该将该命令放在 /etc/rc.local 中(或在 opensuse 中等效)
initscripts 必须有一定的语法。您可以查看其中一个示例,但您需要的是 /etc/rc.local
绝对应该有一种方法可以从 /etc/rc*. 您可能想要研究的另一种选择是 cron。使用 vixie-cron,可以使用 crontab 中的 @reboot 关键字指定要在重启时运行的任务:
上表来自 Jeremy Zawodny 的博客文章,我不允许以新用户的身份发布链接。在 Google 上搜索“vixie-cron 指定启动时的任务”,这是第一个结果。
正如文章中提到的,这是允许用户在启动时运行命令而不授予他们 root 访问权限的好方法。
还值得检查 /etc/inittab 以确保您默认启动到运行级别 5,查找如下行:
id:2:initdefault:
那来自我的 debian 笔记本电脑,显示我默认启动到运行级别 2(这是 debian 的默认设置)。
在 RedHat 衍生产品(如 openSuSE)上,运行级别 5 是运行 X11 时的默认值,运行级别 3 是启动到控制台的默认值。
opensuse 有 selinux 吗?如果是这样,它是否已打开,您的脚本的上下文是否与其他启动脚本相同?试试看
getenforce
selinux中是否安装了开启。尝试ls -lZ /etc/init.d/rc5.d/
查看脚本的上下文