Linux-linux下进程存在可是并没有执行程序的问题
我有个一个php程序每隔60秒检查当前是否有新的内容发布,有的话发布,同时判断是否有过期的内容要删除,有的话删除
采用的方式是
set_time_limit(0);
while (true) {
....
sleep(60);
}
然后再linux下 nohup 让改程序在后台执行
年前是没有问题的,可是今天查看数据的时候发现了异常,貌似是这个程序没执行
ps -ef | grep php 查看进程的时候这进程是存在的
后来把这个进程杀掉 有重新启动进程才ok的
请教一下,为什么会出现这样的问题,如果我在linux下用crontab 每隔60秒定时执行这个程序,会对性能有影响吗
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
下面是我贴了一个类似的问题,不知道对你是否有用!
Unix/Linux下一般想让某个程序在后台运行,很多都是使用 & 在程序结尾来让程序自动运行。比如我们要运行mysql在后台:
/usr/local/mysql/bin/mysqld_safe --user=mysql &
但是我们很多程序并不象mysqld一样可以做成守护进程,可能我们的程序只是普通程序而已,一般这种程序即使使用 & 结尾,如果终端关闭,那么程序也会被关闭。为了能够后台运行,我们需要使用nohup这个命令,比如我们有个start.sh需要在后台运行,并且希望在后台能够一直运行,那么就使用nohup:
nohup /root/start.sh &
在shell中回车后提示:
[~]$ appending output to nohup.out
原程序的的标准输出被自动改向到当前目录下的nohup.out文件,起到了log的作用。
但是有时候在这一步会有问题,当把终端关闭后,进程会自动被关闭,察看nohup.out可以看到在关闭终端瞬间服务自动关闭。
咨询红旗Linux工程师后,他也不得其解,在我的终端上执行后,他启动的进程竟然在关闭终端后依然运行。
在第二遍给我演示时,我才发现我和他操作终端时的一个细节不同:他是在当shell中提示了nohup成功后还需要按终端上键盘任意键退回到shell输入命令窗口,然后通过在shell中输入exit来退出终端;而我是每次在nohup执行成功后直接点关闭程序按钮关闭终端.。所以这时候会断掉该命令所对应的session,导致nohup对应的进程被通知需要一起shutdown。
你的程序间隔时间这么长,建议用crontab来做,会稳定得多,性能应该不会有多大影响,crontab本来每分钟激活一次,检查cron 文件列表,进而运行对应的程序
php程序跑的时间长了就是会遇到这些问题,我这边以前也有程序是这样,如果你害怕影响系统性能,程序还可以照样这么写,然后用crontab没半个小时或一个小时重启一次这个进程。
以前在c++遇到同样的问题,我的情况:
1.服务器时间同步造成的,系统时间有被后拉现象。比如:现在2点,一会被同步为 1 点。