第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]

crontab文件的一些例子

[不指定 2017/09/14 13:35 | by 刘新修 ]
30 21 * * * /usr/local/etc/rc.d/apache restart
#每晚的21:30 重启apache
 
45 4 1,10,22 * * /usr/local/etc/rc.d/apache restart
#每月1、10、22日的4 : 45重启apache
 
10 1 * * 6,0 /usr/local/etc/rc.d/apache restart
#每周六、周日的1 : 10重启apache
 
0,30 18-23 * * * /usr/local/etc/rc.d/apache restart
#每天18 : 00至23 : 00之间每隔30分钟重启apache
 
0 23 * * 6 /usr/local/etc/rc.d/apache restart
#每星期六的11 : 00 pm重启apache
 
* 23-7/1 * * * /usr/local/etc/rc.d/apache restart
#晚上11点到早上7点之间,每隔一小时重启  apache
 
* */1 * * * /usr/local/etc/rc.d/apache restart
#每一小时重启apache
 
0 11 4 * mon-wed /usr/local/etc/rc.d/apache restart
#每月的4号与每周一到周三的11点重启apache
 
0 4 1 jan * /usr/local/etc/rc.d/apache restart
#一月一号的4点重启apache
 
*/30 * * * * /usr/sbin/ntpdate 210.72.145.44
#每半小时同步一下时间
 
0 */2 * * * www /usr/bin/somecommand  >>  /dev/null 2>&1 #以用户www的身份每两小时就运行某个程序:
 
字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。
举例如下:
5 * * * * ls
指定每小时的第5分钟执行一次ls命令
 
30 5 * * * ls
指定每天的 5:30 执行ls命令
 
30 7 8 * * ls
指定每月8号的7:30分执行ls命令
 
30 5 8 6 * ls
指定每年的6月8日5:30执行ls命令
 
30 6 * * 0 ls
指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1,
 
以此类推,也可以用英文来表示,sun表示星期天,mon表示星期一等。]
 
30 3 10,20 * * ls
每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
 
25 8-11 * * * ls
每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
 
*/15 * * * * ls
每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
 
30 6 */10 * * ls
每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令]
 
50 7 * * * root run-parts /etc/cron.daily
每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件
[注:run-parts参数表示,执行后面目录中的所有可执行文件]

Mac 修改截图保存路径

[不指定 2017/09/14 11:35 | by 刘新修 ]

终端执行:

CSS代码
  1. defaults write com.apple.screencapture location ~/Desktop/screenshot  

有需要复制指令:

C#代码
  1. killall SystemUIServe  

这样,以后你的屏幕截图就会存储到你指定的文件夹中了:

/Users/jesse/Desktop/Screenshot

可设置软链接:

ln -s /Users/jesse/Desktop/Screenshot /mine/Screenshot

截图全屏:cmd+shift+3

截图局部:cmd+shift+4

buff/cache 内容释放

[不指定 2017/09/14 11:02 | by 刘新修 ]

实验环境 CentOS Linux release 7.3.1611 (Core)  3.10.0-514.6.1.el7.x86_64

oscache远程服务器特别卡,top命令查看获得 buff/cache 占据内存特别大,使用以下命令清理缓存:

swap清理:

swapoff -a && swapon -a

注意:这样清理有个前提条件,空闲的内存必须比已经使用的swap空间大

cache清理:

sync; sync; sync;&& echo 3 > /proc/sys/vm/drop_caches

sleep 2

echo 0 >/proc/sys/vm/drop_caches

To free pagecache:

echo 1 >/proc/sys/vm/drop_caches

To free dentries and inodes:

echo 2 >/proc/sys/vm/drop_caches

To free pagecache,dentries and inodes:

echo 3 >/proc/sys/vm/drop_caches

 

/proc/sys/vm/drop_caches 的值默认为0(所以我们清空后,还再恢复它的值为0)

一、概念介绍
linux系统中通常使用free命令来查看内存使用情况,free命令主要是从/proc/meminfo文件中读取的内存数据然后进行简单处理进行展示,根据查看free命令的手册了解到各个字段的含义。
total:系统总内存大小(分物理内存mem、交换分区swap)
used:已使用的内存(total - free - buffers - cache)
free:未使用的内存
shared:通常情况下是tmpfs(内存文件系统)使用的内存
buffers:内核缓冲区使用的内存
cache:page cache和slab所占用的内存之和
buff/cache:buffers + cache
available:在不进行swap的前提下还有多少内存可用于创建新的进程。这个跟free、buff/cache字段中的数字有所不同,这里的剩余内存是free加上可以被回收(有些slab、cache正在使用,不能回收)的page cache、mem slab的值的总和。
上述的page cache是系统读写磁盘文件时为了提高性能而将一部分文件缓存到内存中。这种做法虽然提高了磁盘I/O性能,但是也极大的占用了物理内存,特别当系统内存紧张时更容易出现问题。
 
二、实际用途
linux系统会经常执行一些写日志、生成备份文件的工作,当这些文件比较大时相应的cache就会占用大量的系统内存,而且这些类型的cache并不会被经常访问,所以系统会定期将这些cache flush到磁盘中。但是如果系统未及时的将这些cache flush到磁盘中的话,就会占用大量的内存导致出现swap的情况,这样会很影响系统的整体性能。
/proc是一个虚拟文件系统,我们可以通过对它的读写操作做为与kernel实体间进行通信的一种手段。也就是说可以通过修改/proc中的文件,来对当前kernel的行为做出调整。有一个内核配置接口 /proc/sys/vm/drop_caches 可以允许用户手动清理cache来达到释放内存的作用,这个文件有三个值:1、2、3。具体介绍如下
Writing to this will cause the kernel to drop clean caches, dentries and inodes from memory, causing that memory to become free.
- To free pagecache:
- * echo 1 > /proc/sys/vm/drop_caches
 
- To free dentries and inodes:
- * echo 2 > /proc/sys/vm/drop_caches
 
- To free pagecache, dentries and inodes:
- * echo 3 > /proc/sys/vm/drop_caches
 
- As this is a non-destructive operation, and dirty objects are notfreeable, the user should run "sync" first in order to make sure allcached objects are freed.
- This tunable was added in 2.6.16.
根据上面介绍,在执行上述命令需要先执行sync命令将page cache刷新到磁盘中,然后在通过该drop_caches接口进行缓存清理。
 
另外,在编写处理大文件的代码时,避免整个文件全部读取到内存中,这样会导致占用大量的内存,极端情况下会出现linux 系统的OOM导致的正常进程被终止。尽量将文件分割成小文件再进行处理,文件使用完毕后尽早close。
 
 
下面是我写的一个内存释放的脚本,分享给大家:
# vim /root/satools/freemem.sh
C#代码
  1. #!/bin/bash  
  2.   
  3. used=`free -m | awk 'NR==2' | awk '{print $3}'`  
  4. free=`free -m | awk 'NR==2' | awk '{print $4}'`  
  5.   
  6. echo "===========================" >> /var/log/mem.log  
  7. date >> /var/log/mem.log  
  8. echo "Memory usage | [Use:${used}MB][Free:${free}MB]" >> /var/log/mem.log  
  9.   
  10. if [ $free -le 100 ] ; then  
  11.                 sync && echo 1 > /proc/sys/vm/drop_caches  
  12.                 sync && echo 2 > /proc/sys/vm/drop_caches  
  13.                 sync && echo 3 > /proc/sys/vm/drop_caches  
  14.                 echo "OK" >> /var/log/mem.log  
  15. else  
  16.                 echo "Not required" >> /var/log/mem.log  
  17. fi
[root@Hongkong log]# vi mem.log
[root@Hongkong log]# chmod +x /etc/sh/freemem.sh
[root@Hongkong log]# pwd
/var/log
[root@Hongkong log]# chmod +x /etc/sh/freemem.sh
[root@Hongkong log]# cat /var/log/cron
 
查看定时任务执行的日志
/var/log/cron

查看定时任务是否开启
systemctl status crond.service
 
如果没有就安装:
yum install vixie-cron
yum install crontabs
 
/bin/systemctl restart crond.service  #启动服务
/bin/systemctl reload  crond.service  #重新载入配置
/bin/systemctl enable crond.service #加入开机服务列表
/bin/systemctl status  crond.service  #查看crontab服务状态
 
关闭并禁用默认防火墙:
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
 
手动开启一些服务:
systemctl start docker.service
systemctl start crond.service
 
开机自动开启默认服务:
systemctl enable nginx.service
systemctl enable httpd.service
systemctl enable docker.service
systemctl enable crond.service
 
 

安装crontab:

1
yum install crontabs

说明:

1
2
3
4
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
1
2
查看crontab服务状态:service crond status
手动启动crontab服务:service crond start

查看crontab服务是否已设置为开机启动,执行命令:ntsysv

加入开机自动启动:

1
chkconfig crond on
 
 
 
将脚本添加到crond任务,定时执行。
# echo "*/59 * * * * root /root/satools/freemem.sh" >> /etc/crondtab (59分钟执行一次)
# echo "2 8-20/6 * * * root /root/satools/freemem.sh" >> /etc/crondtab (8-20时的2分,每隔6个小时执行一次)

 看了co的源码 比较难懂 了解了其原理后实现了一个最简版本https://github.com/yucong/simple-co 希望对想学习的tx有帮助~ yeild后面只支持thunk,co本身也是一个thunk 核心代码:

JavaScript代码
  1. function co(generator) {  
  2.   return function(fn) {  
  3.     var gen = generator();  
  4.     function next(err, result) {  
  5.         if(err){  
  6.             return fn(err);  
  7.         }  
  8.         var step = gen.next(result);  
  9.         if (!step.done) {  
  10.             step.value(next);  
  11.         } else {  
  12.             fn(null, step.value);  
  13.         }  
  14.     }  
  15.     next();  
  16.    }  
  17. }  

用法:

JavaScript代码
  1. var co = require('./co');  
  2. // wrap the function to thunk  
  3. function readFile(filename) {  
  4.     return function(callback) {  
  5.         require('fs').readFile(filename, 'utf8', callback);  
  6.     };  
  7. }  
  8.   
  9. co(function * () {  
  10.     var file1 = yield readFile('./file/a.txt');  
  11.     var file2 = yield readFile('./file/b.txt');  
  12.   
  13.     console.log(file1);  
  14.     console.log(file2);  
  15.     return 'done';  
  16. })(function(err, result) {  
  17.     console.log(result)  
  18. });  

会打印出: content in a.txt content in b.txt done

 

下面做个简单对比:
传统方式,sayhello是一个异步函数,执行helloworld会先输出"world"再输出"hello"

JavaScript代码
  1. function sayhello() {  
  2.     return Promise.resolve('hello').then(function(hello) {  
  3.         console.log(hello);  
  4.     });  
  5. }  
  6. function helloworld() {  
  7.     sayhello();  
  8.     console.log('world');  
  9. }  
  10. helloworld();  

输出

 

JavaScript代码
  1. "world"  
  2. "hello"  

co 的方式,会先输出"hello"再输出"world"

JavaScript代码
  1. function co(gen) {  
  2.     var it = gen();  
  3.     var ret = it.next();  
  4.     ret.value.then(function(res) {  
  5.         it.next(res);  
  6.     });  
  7. }  
  8. function sayhello() {  
  9.     return Promise.resolve('hello').then(function(hello) {  
  10.         console.log(hello);  
  11.     });  
  12. }  
  13. co(function *helloworld() {  
  14.     yield sayhello();  
  15.     console.log('world');  
  16. });  

输出

JavaScript代码
  1. "hello"  
  2. "world"  

 

消除回调金字塔

假设sayhello/sayworld/saybye是三个异步函数,用真正的 co 模块就可以这么写:

JavaScript代码
  1. var co = require('co');  
  2. co(function *() {  
  3.     yield sayhello();  
  4.     yield sayworld();  
  5.     yield saybye();  
  6. });  

输出

JavaScript代码
  1. "hello"  
  2. "world"  
  3. "bye"  

 

 问题背景,从vmware6.0版本的物理机上导出虚拟机ovf模板后,导入到4.1版本物理机上时报错:“硬件系列vmx-11不受支持”。

1.打开xxx.ovf文件,将<vssd:VirtualSystemType>vmx-11</vssd:VirtualSystemType> 改成物理机支持的版本:<vssd:VirtualSystemType>vmx-7</vssd:VirtualSystemType> 

2.打开xxx.mf文件,将对VOF引用的哪一行删掉,不然 在部署的时候会报文件 xxxx.ovf 的完整性检查失败,可能在传输过程中已损坏。

删掉 SHA1(xxx.ovf)= f801b24cd5f664a9f3f88810b87e0080fb5bf29f

google chrome 插件安装目录

[不指定 2017/06/19 13:52 | by 刘新修 ]

MAC:

C#代码
  1. /Users/jesse/Library/Application Support/Google/Chrome/Default/Extensions/nhdogjmejiglipccpnnnanhbledajbpd/0.0.2_0  

windows:

C#代码
  1. C:\Users\Administrator\AppData\Local\Google\Chrome\User Data\Default\Extensions\nhdogjmejiglipccpnnnanhbledajbpd\3.1.4_0  

 

Docker v17.04.0-ce-rc1 发布了,并将于 2017-04-05 发布 17.04.0-ce  版本。本次更新内容如下:

Client

  • Sort docker stack ls by name #31085

  • Flags for specifying bind mount consistency #31047

  • Suppressing image digest in docker ps #30848

  • Hide command options that are related to Windows #30788

  • Fix docker plugin install prompt to accept "enter" for the "N" default #30769

  • Add truncate function for Go templates #30484

  • Support expanded syntax of ports in stack deploy #30476

  • Support expanded syntax of mounts in stack deploy #30597 #31795

  • Add --add-host for docker build #30383

  • Add .CreatedAt placeholder for docker network ls --format #29900

  • Update order of --secret-rm and --secret-add #29802

  • Fix use of **/ in .dockerignore #29043

  • Add --filter enabled=true for docker plugin ls #28627

  • Add --format to docker service ls #28199

  • Add publish and expose filter for docker ps --filter #27557

  • Support multiple service IDs on docker service ps #25234

  • Allow swarm join with --availability=drain #24993

  • Removal of the email from docker login #26868

Networking

  • Check parameter --ip, --ip6 and --link-local-ip in docker network connect #30807

  • Added support for dns-search #30117

  • Added --verbose option for docker network inspect to show task details from all swarm nodes #31710

Runtime

  • Handle paused container when restoring without live-restore set #31704

  • Do not allow sub second in healthcheck options in Dockerfile #31177

  • Support name and id prefix in secret update #30856

  • Use binary frame for websocket attach endpoint #30460

  • Fix linux mount calls not applying propagation type changes #30416

  • Fix ExecIds leak on failed exec -i #30340

  • Prune named but untagged images if danglingOnly=true #30330

  • Add daemon flag to set no_new_priv as default for unprivileged containers #29984

  • Add daemon option --default-shm-size #29692

  • Support registry mirror config reload #29650

  • Ignore the daemon log config when building images #29552

  • Move secret name or ID prefix resolving from client to daemon #29218

  • Implement optional ring buffer for container logs #28762

  • Allow adding rules to cgroup devices.allow on container create/run #22563

Swarm Mode

  • Add Service logs formatting #31672

  • Fix service logs API to be able to specify stream #31313

  • Add --stop-signal for service create and service update #30754

  • Add --read-only for service create and service update #30162

  • Renew the context after communicating with the registry #31586

Windows

  • Wait for OOBE to prevent crashing during host update #31054

  • Block pulling Windows images on non-Windows daemons #29001

下载

3月2日,Docker 官方发布了一篇 blog ,宣布企业版到来。版本也从1.13.x一跃到17.03。

之后,Docker 会每月发布一个 edge 版本(17.03, 17.04, 17.05...),每三个月发布一个 stable 版本(17.03, 17.06, 17.09...),企业版(EE) 和 stable 版本号保持一致,但每个版本提供一年维护。

Docker 的 Linux 发行版的软件仓库也从以前的https://apt.dockerproject.org / https://yum.dockerproject.org 变更为目前的 https://download.docker.com/。软件包名变更为 docker-ce(社区版) 和 docker-ee(企业版)。

旧的仓库和包名(docker-engine)依旧可以使用,但不确定什么时候会被废弃,docker-engine 的版本号也变成了17.03.0~ce-0这种的版本号。

Docker v17.03.0-ce 版本更新内容和下载地址请查看发行日志

Docker的网络模式和跨主机通信(Docker的四种网络模式Bridge模式)

当Docker进程启动时,会在主机上创建一个名为docker0...

Docker的四种网络模式

1. Bridge模式

当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。

从docker0子网中分配一个IP给容器使用,并设置docker0的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair设备,Docker将veth pair设备的一端放在新创建的容器中,并命名为eth0(容器的网卡),另一端放在主机中,以vethxxx这样类似的名字命名,并将这个网络设备加入到docker0网桥中。可以通过brctl show命令查看。

bridge模式是docker的默认网络模式,不写--net参数,就是bridge模式。使用docker run -p时,docker实际是在iptables做了DNAT规则,实现端口转发功能。可以使用iptables -t nat -vnL查看。

 

bridge模式如下图所示:

演示:

C#代码
  1. #docker run -tid --net=bridge --name docker_bri1 ubuntu-base:v3  
  2. #docker run -tid --net=bridge --name docker_bri2 ubuntu-base:v3  
  3.  
  4. #brctl show  
  5. #docker exec -ti docker_bri1 /bin/bash  
  6. #docker exec -ti docker_bri1 /bin/bash  
  7.  
  8. #ifconfig –a  
  9. #route –n  

2. Host模式

如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

Host模式如下图所示:

演示:

C#代码
  1. #docker run -tid --net=host --name docker_host1 ubuntu-base:v3  
  2. #docker run -tid --net=host --name docker_host2 ubuntu-base:v3  
  3.  
  4. #docker exec -ti docker_host1 /bin/bash  
  5. #docker exec -ti docker_host1 /bin/bash  
  6.  
  7. #ifconfig –a  
  8. #route –n  

3. Container模式

这个模式指定新创建的容器和已经存在的一个容器共享一个 Network Namespace,而不是和宿主机共享。新创建的容器不会创建自己的网卡,配置自己的 IP,而是和一个指定的容器共享 IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。两个容器的进程可以通过 lo 网卡设备通信。

Container模式示意图:

演示:

C#代码
  1. #docker run -tid --net=container:docker_bri1 --name docker_con1 ubuntu-base:v3  
  2.  
  3. #docker exec -ti docker_con1 /bin/bash  
  4. #docker exec -ti docker_bri1 /bin/bash  
  5.  
  6. #ifconfig –a  
  7. #route -n  

4. None模式

使用none模式,Docker容器拥有自己的Network Namespace,但是,并不为Docker容器进行任何网络配置。也就是说,这个Docker容器没有网卡、IP、路由等信息。需要我们自己为Docker容器添加网卡、配置IP等。

Node模式示意图:

演示:

C#代码
  1. #docker run -tid --net=none --name docker_non1 ubuntu-base:v3  
  2. #docker exec -ti docker_non1 /bin/bash  
  3.  
  4. #ifconfig –a  
  5. #route -n  

跨主机通信

Docker默认的网络环境下,单台主机上的Docker容器可以通过docker0网桥直接通信,而不同主机上的Docker容器之间只能通过在主机上做端口映射进行通信。这种端口映射方式对很多集群应用来说极不方便。如果能让Docker容器之间直接使用自己的IP地址进行通信,会解决很多问题。按实现原理可分别直接路由方式、桥接方式(如pipework)、Overlay隧道方式(如flannel、ovs+gre)等。

直接路由

通过在Docker主机上添加静态路由实现跨宿主机通信:

Pipework

Pipework是一个简单易用的Docker容器网络配置工具。由200多行shell脚本实现。通过使用ip、brctl、ovs-vsctl等命令来为Docker容器配置自定义的网桥、网卡、路由等。

使用新建的bri0网桥代替缺省的docker0网桥

bri0网桥与缺省的docker0网桥的区别:bri0和主机eth0之间是veth pair

Webbench MAC下安装

[不指定 2017/06/10 16:57 | by 刘新修 ]

Webbench是有名的网站压力测试工具,它是由 Lionbridge公司开发。

Webbech能测试处在相同硬件上,不同服务的性能以及不同硬件上同一个服务的运行状况。webBech的标准测试可以向我们展示服务器的两项内容:每秒钟相应请求数和每秒钟传输数据量。webbench不但能具有便准静态页面的测试能力,还能对动态页面(ASP,PHP,Java,CGI)进 行测试的能力。还有就是他支持对含有SSL的安全网站例如电子商务网站进行静态或动态的性能测试。

安装: Make install 需 sudo 权限, 需要写入 /usr/local/bin

C#代码
  1. brew install ctags # 依赖安装  
  2. curl -o webbench.tar.gz http://blog.zyan.cc/soft/linux/webbench/webbench-1.5.tar.gz  
  3. tar -zxvf webbench-1.5.tar.gz  
  4. cd webbench-1.5/  
  5. mkdir -pv /usr/local/man/man1 # 关键  
  6. sudo make && sudo make install # sudo 权限因为需要创建文件夹  

Mac下自带apache压力测试:

C#代码
  1. localhost:webbench-1.5 jesse$ webbench -c 500 -t 120 http://localhost/  
  2. Webbench - Simple Web Benchmark 1.5  
  3. Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.  
  4.   
  5. Benchmarking: GET http://localhost/  
  6. 500 clients, running 120 sec.  
  7.   
  8. Speed=33001 pages/min, 696314 bytes/sec.  
  9. Requests: 64078 susceed, 1924 failed.  
  10. localhost:webbench-1.5 jesse$   

 

  当我们实例化一个php类的时候,要怎么传递参数呢?这取决于该类的构造方法。

  例:

  person.class.php

  

  class person{

  var $name;

  var $color;

  var $sex;

  var $age;

  function __construct($name,$age='',$sex='boy'){

  $this->name = $name;

  $this->age = $age;

  $this->sex = $sex;

  $this->color = 'yello';

  }

  function eat(){

  echo $this->name.'要吃饭';

  }

  function xinxi(){

  echo $this->name.' is '.$this->sex.' and age is '.$this->age.' fuse is '.$this->color;

  }

  }

  ?>

  son.php

  

  include('person.class.php');

  $son = new person('cuihua',25,'girl');//此处的参数传递要和类的构造方法里面的参数顺序对应

  //$son->xinxi();//cuihua is girl and age is 25 fuse is yello

  $son->name = '田妞';

  $son->eat();//田妞要吃饭

  ?>

第一页 上页 1 2 3 4 5 6 7 8 9 10 下页 最后页 [ 显示模式: 摘要 | 列表 ]