docker 常用命令,已备不时之需

镜像命令

docker images  列出镜像

docker search nginx –搜索nginx镜像

docker pull nginx –拉取镜像

docker rmi –删除镜像

容器命令

docker run -p 1234:80 –name nginx1 -it nginx /bin/bash –运行

docker start –name –开启

docker exec -it nginx /bin/bash –进入容器内部

docker rm –name 删除容器

docker commit -a “作者” -m “备注” 容器ID 镜像名:tag 容器提交

nodejs程序配置成windows-server服务,实现开机自启动,安装为windows服务

使用模块

node-windows

代码

在项目中下载node-windows模块 :  npm install node-windows –save

在项目根目录创建nw.js文件,代码如下

let path = require('path');
 
let Service = require('node-windows').Service;
 
// Create a new service object
let svc = new Service({
  name:'node windows server test', //名称
  description: 'The socket.io nodejs server test ',//描述
  script:  path.resolve('./app.js'),//node执行入口
  nodeOptions: [
    '--harmony',
    '--max_old_space_size=4096'
  ]
});
 
// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});
 
svc.install();

安装服务

然后执行 node nw.js (注意修改之后,再次执行,需要删除在当前目录生成的daemon)

安装windows服务,安装过程中会有一些阻止,全部选择允许。

最终在服务中可以看到安装的服务。

删除服务命令:用管理员身份打开命令提示符窗口,执行 sc delete serviceName

serviceName,可以在服务中右键打开属性中查看

删除服务

如果我们要删除该服务,执行的命令式 sc delete node_lol.exe

然后会提示:[SC] DeleteService 成功

windows 2008 r2 系统默认80端口被系统进程为4占用

–windows 2008 r2 系统默认80端口被系统占用的处理

–使用netstat 命令查看指定端口
netstat -ano | findstr :80
—-如下所示:本地的80端口被进程为4的占用
TCP    0.0.0.0:80             0.0.0.0:0              LISTENING       4
TCP    192.168.1.207:60652    221.233.41.28:80       CLOSE_WAIT      17160
TCP    [::]:80                [::]:0                 LISTENING       4

—-任务管理器查看进 pid 为4
进程名   pid  描述
system   4    net kernel&System

—-打开注册表 regedit
‘HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\HTTP’右边有一个’start’的DWORD的值将’3’改为’4’。
—-重启服务器后正常

llinux中df和du磁盘空间不一致的问题

最近有台服务器磁盘报警的时候,我上去看是日志满了,然后删除了日志后,神奇的事情发生了 使用df -h 发现磁盘是满的,然后使用du -h 发现并没有大文件占满,这到底是怎么回事呢?

原因:

du -h
du -sh命令通过将指定文件系统路径下所有的目录、符号链接、文件使用的块数累加起来得到总块数以及总大小。它会遍历这个目录,针对所有真实存在的文件、目录等汇总,给出最终结果

df -h
首先,获取这个文件的文件句柄,这是会判断这个文件是否存在!
然后,程序所有的写入操作仅仅使用文件句柄,而不再关注具体文件是否存在!Linux中允许对一个正在写入的文件进行删除RM或者移动MV。应用程序获取句柄,就直接指向到了磁盘位置,到了数据块的级别上进行写入了,不再检查数据块所属的文件是否存在。这时候的写入,对于其他人,由于访问的入口–文件–不存在了,所以是看不到其写入的内容的!

解决方案:

lsof -n | grep deleted

找到打开的但被删除的文件,然后找到使用这个文件的服务重新启动就可以了。这个时候再用df -h 去查看磁盘空间已经正常了。