我希望我的 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
但是,该脚本仍然不会在启动时运行。
答案1
您是否尝试过在 /etc/init.d/boot.local 中添加对该脚本的调用?尝试一下,看看效果是否更好。还有其他几个 boot.* 文件在启动的不同部分运行。
答案2
您应该将您的链接命名为 S99something,其中 S 代表启动,99 代表该目录中脚本的启动顺序。请参阅该目录中的另一个链接...
此外:您可能需要重新编写脚本以遵守启动/停止参数,并添加 K99something 符号链接以确保离开此运行级别时服务能够正确停止。
答案3
您是否已经按照 openSUSE 网站? 这肯定有效。
有一个很好的解释酷解决方案以及
答案4
肯定有一种方法可以从 /etc/rc* 中执行您想要的操作。您可能想要研究的另一种选择是 cron。使用 vixie-cron,可以使用 crontab 中的 @reboot 关键字指定在重启时运行的任务:
Instead of the first five fields, one of eight special strings may
appear:
string meaning
------ -------
@reboot Run once, at startup.
@yearly Run once a year, "0 0 1 1 *".
@annually (same as @yearly)
@monthly Run once a month, "0 0 1 * *".
@weekly Run once a week, "0 0 * * 0".
@daily Run once a day, "0 0 * * *".
@midnight (same as @daily)
@hourly Run once an hour, "0 * * * *".
上表来自 Jeremy Zawodny 的一篇博客文章,作为新用户,我不允许发布该文章的链接。在 Google 上搜索“vixie-cron 启动时指定任务”,这是第一个结果。
正如文章中提到的,这是一种允许用户在启动时运行命令而不授予他们 root 访问权限的好方法。