今天还遇到一个比较蛋疼的问题,就是写的脚本在服务器上执行跑不出数据来,一开始以为是脚本写的有问题,跑不出来,就反复改脚本,实在没啥可改的了,觉得脚本没有问题。可是为啥就是没数据呢!悲催啊。你写的东西没结果,肯定以为是你的问题。做程序员就是这样,你的工作没有结果,肯定就是你的问题。哎。
因为我写的是统计分析的脚本,因为很多数据都是多个表联合查询,汇总,运算出来的,然后写库,形成记录;所以在测试上比较难测试,只能简单的在测试机上测试下,然后去线上跑,看结果。
我每次把脚本传给运维,运维上传,然后帮我执行,可是结果呢,总是发现数据少,还不是没有结果,所以一直以为是我的程序的问题。运维在线上执行任何操作的都是走跳板机,就是通过一个中间机器,连接在其他的服务器,任何操作都在跳板机上做有记录。
运维是这样执行的:跳板机连接到服务器,饭后执行 php 我的脚本 & ;然后没啥问题的话,就把跳板关了。当你关的时候,其实脚本程序也被kill掉了,但是他们也不知道,因为我的脚本执行时间不少,所以不是特别的明显。
其实这样执行是有问题的,如果执行phpfile & 如果你关掉bush的话,你的脚本也会被杀死,需要用nohoup php file & 这样的话,及时你关闭连接也会执行的。
附:后台执行UNIX/Linux命令和脚本的五种方法 (附件为网上查找的)
1. 使用&符号在后台执行命令
你可以在Linux命令或者脚本后面增加&符号,从而使命令或脚本在后台执行,例如:.
$ ./my-shell-script.sh &
2. 使用nohup在后台执行命令
使用&符号在后台执行命令或脚本后,如果你退出登录,这个命令就会被自动终止掉。要避免这种情况,你可以使用nohup命令,如下所示:
$ nohup ./my-shell-script.sh &
3. 使用screen执行命令
通过nohup和&符号在后台执行命令后,即使你退出登录,这个命令也会一直执行。但是,你无法重新连接到这个会话,要想重新连接到这个会话,你可以使用screen命令。.
Linux的screen命令提供了分离和重新连接一个会话的功能。当你重新连接这个会话的时候,你的终端和你分离的时候一模一样。
4. 使用at将一个命令作为批处理执行
使用at命令,你可以让一个命令在指定的日期和时间运行,例如要在明天上午10点在后台执行备份脚本,执行下面的命令:
$ at -f backup.sh 10 am tomorrow
在批处理模式下执行某些任务需要启用一些选项。下面的文章会给出详细解释:.
5. 使用watch连续地执行一个命令
要想按一个固定的间隔不停地执行一个命令,可以使用watch命令,如下所示:
$ watch df -h