在共享服务器上,如何在启动时运行脚本/进程?

在共享服务器上,如何在启动时运行脚本/进程?

我想我可以让一个 cron 作业每分钟或每 5 分钟运行一次,并让它以某种方式检查该进程是否已在运行(不确定如何做到这一点)。

这是最好的方法吗?或者我的主目录中是否有另一个类似的 .startup 脚本可以放入脚本?

答案1

这里的问题似乎是您没有此主机的 root 访问权限,因此无法更改系统启动脚本,例如/etc/rc.local。在用户 crontab 中使用一行的想法@reboot值得探索。我还没有以普通用户身份尝试过,但它应该可行。

另一个想法是,正如您所说的那样,每隔几分钟在用户 crontab 中运行某些操作,检查您的进程是否正在运行,如果没有,则重新启动。例如:

*/5 * * * * ps -u $USER | grep myscript >/dev/null || $HOME/bin/myscript

对这种事情要非常小心——如果你犯了一个错误,你最终会每 5 分钟启动一次程序的额外副本,这最终可能会导致很多问题。

答案2

你可以使用 chkconfig - 或者偷懒,只需在你的 crontab 中运行

@reboot 命令到这里

这个链接可能会对你有很大帮助(当然可以省去我全部输入的时间)

http://linuxhelp.blogspot.com/2006/04/enabling-and-disabling-services-during_01.html

答案3

根据您的发行版(您没有提到它),您有相当广泛的选择范围:chkconfig,rcconf,/etc/(rc.d/)rc.local,在init.d\rc.d中符号链接启动脚本 - 但所有这些都需要root权限。

我假设您没有权限使用 sudo。这样您就只有一个选择,在 crontab 中添加一个脚本,检查进程是否正在运行,如果没有,则启动它。您还可以获得一种可用性增强(例如,如果您的进程崩溃,它会再次启动)。

我的看法是:

#!/bin/sh

proc=process_name
`ps aux > /tmp/.$proc; awk '/$proc/{print $2}' /tmp/.$proc > /tmp/.x` #if process is alive then copy its PID in .x
    if [ -s /tmp/.x ]; then    #-s file True if file exists and has a size greater than zero. 
            echo k   #.x is greater than zero => process is alive, all ok
    else
            /etc/init.d/daemon start _or_whatever_startup file_ #.x was zero, process dead.
    fi
`rm -f /tmp/.$proc && rm -f /tmp/.x`

相关内容