![在共享服务器上,如何在启动时运行脚本/进程?](https://linux22.com/image/537347/%E5%9C%A8%E5%85%B1%E4%BA%AB%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%EF%BC%8C%E5%A6%82%E4%BD%95%E5%9C%A8%E5%90%AF%E5%8A%A8%E6%97%B6%E8%BF%90%E8%A1%8C%E8%84%9A%E6%9C%AC%2F%E8%BF%9B%E7%A8%8B%EF%BC%9F.png)
我想我可以让一个 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`