精华内容
下载资源
问答
  • linux中crontab命令启动/重启/停止详解

    万次阅读 2018-01-27 15:17:20
    linux中crontab命令启动/重启/停止详解 linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置...

    linux中crontab命令启动/重启/停止详解

    linux 系统则是由 cron (crond) 这个系统服务来控制的。Linux 系统上面原本就有非常多的计划性工作,因此这个系统服务是默认启动的。另 外, 由于使用者自己也可以设置计划任务,所以, Linux 系统也提供了使用者控制计划任务的命令 :crontab 命令。

    一、crond简介

    crond 是linux下用来周期性的执行某种任务或等待处理某些事件的一个守护进程,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务 工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任务,如果有要执行的任务,则自动执行该任务。

    Linux下的任务调度分为两类,系统任务调度和用户任务调度。

    系统任务调度:系统周期性所要执行的工作,比如写缓存数据到硬盘、日志清理等。在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件。

    /etc/crontab文件包括下面几行:

     代码如下
    1 [root@localhost ~]# cat /etc/crontab
    2 SHELL=/bin/bash
    3 PATH=/sbin:/bin:/usr/sbin:/usr/bin
    4 MAILTO=””HOME=/
    5 # run-parts
    6 51 * * * * root run-parts /etc/cron.hourly
    7 24 7 * * * root run-parts /etc/cron.daily
    8 22 4 * * 0 root run-parts /etc/cron.weekly
    9 42 4 1 * * root run-parts /etc/cron.monthly
    10 [root@localhost ~]#

    前 四行是用来配置crond任务运行的环境变量,第一行SHELL变量指定了系统要使用哪个shell,这里是bash,第二行PATH变量指定了系统执行 命令的路径,第三行MAILTO变量指定了crond的任务执行信息将通过电子邮件发送给root用户,如果MAILTO变量的值为空,则表示不发送任务 执行信息给用户,第四行的HOME变量指定了在执行命令或者脚本时使用的主目录。第六至九行表示的含义将在下个小节详细讲述。这里不在多说。

    用户任务调度:用户定期要执行的工作,比如用户数据备份、定时邮件提醒等。用户可以使用 crontab 工具来定制自己的计划任务。所有用户定义的crontab 文件都被保存在 /var/spool/cron目录中。其文件名与用户名一致。

    使用者权限文件:

    文件:

    /etc/cron.deny

    说明:

    该文件中所列用户不允许使用crontab命令

    文件:

    /etc/cron.allow

    说明:

    该文件中所列用户允许使用crontab命令

    文件:

    /var/spool/cron/

    说明:

    所有用户crontab文件存放的目录,以用户名命名

    crontab文件的含义:

    用户所建立的crontab文件中,每一行都代表一项任务,每行的每个字段代表一项设置,它的格式共分为六个字段,前五段是时间设定段,第六段是要执行的命令段,格式如下:

    minute   hour   day   month   week   command

    其中:

    minute: 表示分钟,可以是从0到59之间的任何整数。

    hour:表示小时,可以是从0到23之间的任何整数。

    day:表示日期,可以是从1到31之间的任何整数。

    month:表示月份,可以是从1到12之间的任何整数。

    week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。

    command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。

    08090352-4e0aa3fe4f404b3491df384758229be1

    在以上各个字段中,还可以使用以下特殊字符:

    星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

    逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”

    中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

    正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。

    二、crond服务

    安装crontab:

    yum install crontabs

    服务操作说明:

    /sbin/service crond start //启动服务

    /sbin/service crond stop //关闭服务

    /sbin/service crond restart //重启服务

    /sbin/service crond reload //重新载入配置

    查看crontab服务状态:

    service crond status

    手动启动crontab服务:

    service crond start

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

    ntsysv

    加入开机自动启动:

    chkconfig –level 35 crond on

    三、crontab命令详解

    1.命令格式:

    crontab [-u user] file

    crontab [-u user] [ -e | -l | -r ]

    2.命令功能:

    通过crontab 命令,我们可以在固定的间隔时间执行指定的系统指令或 shell script脚本。时间间隔的单位可以是分钟、小时、日、月、周及以上的任意组合。这个命令非常设合周期性的日志分析或数据备份等工作。

    3.命令参数:

    -u user:用来设定某个用户的crontab服务,例如,“-u ixdba”表示设定ixdba用户的crontab服务,此参数一般有root用户来运行。

    file:file是命令文件的名字,表示将file做为crontab的任务列表文件并载入crontab。如果在命令行中没有指定这个文件,crontab命令将接受标准输入(键盘)上键入的命令,并将它们载入crontab。

    -e:编辑某个用户的crontab文件内容。如果不指定用户,则表示编辑当前用户的crontab文件。

    -l:显示某个用户的crontab文件内容,如果不指定用户,则表示显示当前用户的crontab文件内容。

    -r:从/var/spool/cron目录中删除某个用户的crontab文件,如果不指定用户,则默认删除当前用户的crontab文件。

    -i:在删除用户的crontab文件时给确认提示。

    4.常用方法:

    1). 创建一个新的crontab文件

    在 考虑向cron进程提交一个crontab文件之前,首先要做的一件事情就是设置环境变量EDITOR。cron进程根据它来确定使用哪个编辑器编辑 crontab文件。9 9 %的UNIX和LINUX用户都使用vi,如果你也是这样,那么你就编辑$ HOME目录下的. profile文件,在其 中加入这样一行:

    EDITOR=vi; export EDITOR

    然后保存并退出。不妨创建一个名为<user> cron的文件,其中<user>是用户名,例如, davecron。在该文件中加入如下的内容。

    # (put your own initials here)echo the date to the console every

    # 15minutes between 6pm and 6am

    0,15,30,45 18-06 * * * /bin/echo ‘date’ > /dev/console

    保存并退出。确信前面5个域用空格分隔。

    在 上面的例子中,系统将每隔1 5分钟向控制台输出一次当前时间。如果系统崩溃或挂起,从最后所显示的时间就可以一眼看出系统是什么时间停止工作的。在有些 系统中,用tty1来表示控制台,可以根据实际情况对上面的例子进行相应的修改。为了提交你刚刚创建的crontab文件,可以把这个新创建的文件作为 cron命令的参数:

    $ crontab davecron

    现在该文件已经提交给cron进程,它将每隔1 5分钟运行一次。

    同时,新创建文件的一个副本已经被放在/var/spool/cron目录中,文件名就是用户名(即dave)。

    2). 列出crontab文件

    为了列出crontab文件,可以用:

    $ crontab -l

    0,15,30,45,18-06 * * * /bin/echo `date` > dev/tty1

    你将会看到和上面类似的内容。可以使用这种方法在$ H O M E目录中对crontab文件做一备份:

    $ crontab -l > $HOME/mycron

    这样,一旦不小心误删了crontab文件,可以用上一节所讲述的方法迅速恢复。

    3). 编辑crontab文件

    如果希望添加、删除或编辑crontab文件中的条目,而E D I TO R环境变量又设置为v i,那么就可以用v i来编辑crontab文件,相应的命令为:

    $ crontab -e

    可以像使用v i编辑其他任何文件那样修改crontab文件并退出。如果修改了某些条目或添加了新的条目,那么在保存该文件时, c r o n会对其进行必要的完整性检查。如果其中的某个域出现了超出允许范围的值,它会提示你。

    我们在编辑crontab文件时,没准会加入新的条目。例如,加入下面的一条:

    # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month

    30 3 1,7,14,21,26 * * /bin/find -name “core’ -exec rm {} \;

    现在保存并退出。最好在crontab文件的每一个条目之上加入一条注释,这样就可以知道它的功能、运行时间,更为重要的是,知道这是哪位用户的作业。

    现在让我们使用前面讲过的crontab -l命令列出它的全部信息:

    $ crontab -l

    # (crondave installed on Tue May 4 13:07:43 1999)

    # DT:ech the date to the console every 30 minites

    0,15,30,45 18-06 * * * /bin/echo `date` > /dev/tty1

    # DT:delete core files,at 3.30am on 1,7,14,21,26,26 days of each month

    30 3 1,7,14,21,26 * * /bin/find -name “core’ -exec rm {} \;

    4). 删除crontab文件

    要删除crontab文件,可以用:

    $ crontab -r

    5). 恢复丢失的crontab文件

    如果不小心误删了crontab文件,假设你在自己的$ H O M E目录下还有一个备份,那么可以将其拷贝到/var/spool/cron/<username>,其中<username>是用户名。如果由于权限问题无法完成拷贝,可以用:

    $ crontab <filename>

    其中,<filename>是你在$ H O M E目录中副本的文件名。

    我建议你在自己的$ H O M E目录中保存一个该文件的副本。我就有过类似的经历,有数次误删了crontab文件(因为r键紧挨在e键的右边)。这就是为什么有些系统文档建议不要直接编辑crontab文件,而是编辑该文件的一个副本,然后重新提交新的文件。

    有些crontab的变体有些怪异,所以在使用crontab命令时要格外小心。如果遗漏了任何选项,crontab可能会打开一个空文件,或者看起来像是个空文件。这时敲delete键退出,不要按<Ctrl-D>,否则你将丢失crontab文件。

    5.使用实例

    实例1:每1分钟执行一次command

    命令:

    * * * * * command

     

    实例2:每小时的第3和第15分钟执行

    命令:

    3,15 * * * * command

     

    实例3:在上午8点到11点的第3和第15分钟执行

    命令:

    3,15 8-11 * * * command

     

    实例4:每隔两天的上午8点到11点的第3和第15分钟执行

    命令:

    3,15 8-11 */2 * * command

     

    实例5:每个星期一的上午8点到11点的第3和第15分钟执行

    命令:

    3,15 8-11 * * 1 command

     

    实例6:每晚的21:30重启smb

    命令:

    30 21 * * * /etc/init.d/smb restart

     

    实例7:每月1、10、22日的4 : 45重启smb

    命令:

    45 4 1,10,22 * * /etc/init.d/smb restart

     

    实例8:每周六、周日的1 : 10重启smb

    命令:

    10 1 * * 6,0 /etc/init.d/smb restart

     

    实例9:每天18 : 00至23 : 00之间每隔30分钟重启smb

    命令:

    0,30 18-23 * * * /etc/init.d/smb restart

     

    实例10:每星期六的晚上11 : 00 pm重启smb

    命令:

    0 23 * * 6 /etc/init.d/smb restart

     

    实例11:每一小时重启smb

    命令:

    * */1 * * * /etc/init.d/smb restart

     

    实例12:晚上11点到早上7点之间,每隔一小时重启smb

    命令:

    * 23-7/1 * * * /etc/init.d/smb restart

     

    实例13:每月的4号与每周一到周三的11点重启smb

    命令:

    0 11 4 * mon-wed /etc/init.d/smb restart

     

    实例14:一月一号的4点重启smb

    命令:

    0 4 1 jan * /etc/init.d/smb restart

    实例15:每小时执行/etc/cron.hourly目录内的脚本

    命令:

    01   *   *   *   *     root run-parts /etc/cron.hourly

    说明:

    run-parts这个参数了,如果去掉这个参数的话,后面就可以写要运行的某个脚本名,而不是目录名了

    四、使用注意事项

    注意环境变量问题
    有时我们创建了一个crontab,但是这个任务却无法自动执行,而手动执行这个任务却没有问题,这种情况一般是由于在crontab文件中没有配置环境变量引起的。

    在 crontab文件中定义多个调度任务时,需要特别注意的一个问题就是环境变量的设置,因为我们手动执行某个任务时,是在当前shell环境下进行的,程 序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的,因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这 样,系统执行任务调度时就没有问题了。

    不要假定cron知道所需要的特殊环境,它其实并不知道。所以你要保证在shelll脚本中提供所有必要的路径和环境变量,除了一些自动设置的全局变量。所以注意如下3点:

    1)脚本中涉及文件路径时写全局路径;

    2)脚本执行要用到java或其他环境变量时,通过source命令引入环境变量,如:

    cat start_cbp.sh

    #!/bin/sh

    source /etc/profile

    export RUN_CONF=/home/d139/conf/platform/cbp/cbp_jboss.conf

    /usr/local/jboss-4.0.5/bin/run.sh -c mev &

    3)当手动执行脚本OK,但是crontab死活不执行时。这时必须大胆怀疑是环境变量惹的祸,并可以尝试在crontab中直接引入环境变量解决问题。如:

    0 * * * * . /etc/profile;/bin/sh /var/www/java/audit_no_count/bin/restart_audit.sh

    注意清理系统用户的邮件日志
    每条任务调度执行完毕,系统都会将任务输出信息通过电子邮件的形式发送给当前系统用户,这样日积月累,日志信息会非常大,可能会影响系统的正常运行,因此,将每条任务进行重定向处理非常重要。

    例如,可以在crontab文件中设置如下形式,忽略日志输出:

    0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1

    “/dev/null 2>&1”表示先将标准输出重定向到/dev/null,然后将标准错误重定向到标准输出,由于标准输出已经重定向到了/dev/null,因此标准错误也会重定向到/dev/null,这样日志输出问题就解决了。

    系统级任务调度与用户级任务调度
    系 统级任务调度主要完成系统的一些维护操作,用户级任务调度主要完成用户自定义的一些任务,可以将用户级任务调度放到系统级任务调度来完成(不建议这么 做),但是反过来却不行,root用户的任务调度操作可以通过“crontab –uroot –e”来设置,也可以将调度任务直接写入/etc /crontab文件,需要注意的是,如果要定义一个定时重启系统的任务,就必须将任务放到/etc/crontab文件,即使在root用户下创建一个 定时重启系统的任务也是无效的。

    其他注意事项
    新创建的cron job,不会马上执行,至少要过2分钟才执行。如果重启cron则马上执行。

    当crontab突然失效时,可以尝试/etc/init.d/crond restart解决问题。或者查看日志看某个job有没有执行/报错tail -f /var/log/cron。

    千万别乱运行crontab -r。它从Crontab目录(/var/spool/cron)中删除用户的Crontab文件。删除了该用户的所有crontab都没了。

    在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义\%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+\%Y\%m\%d’。



    转自:http://www.111cn.net/sys/linux/114487.htm

    展开全文
  • 批处理命令集 1 iis定时重启

    使用批处理设置、启动和停止服务

        当电脑安装了数据库服务(如,Oracle、SQLServer)或一些web服务(如IIS,tomcat)时,系统会添加很多服务(services)项。而这些服务往往是占用很大的系统资源的。如果在平时不用的时候一直处于启动状态是对系统资源的极大浪费。所以我们就通过“管理工具”中的“服务”将所有不必要的服务停止。但是每次用到的时候或不用的时候手工去启动和停止比较麻烦。用批理来操作会方便很多。

    下面介绍两种使用批处理操作来 设置、启动和停止服务的方法。
    从Windows XP开始,其自带的DOS工具中加入了一个sc.exe(Service Control)和net.exe (C:/WINDOWS/system32)的文件,恰好可以对服务的启动类型以及服务的启动或者关闭等进行操作,再利用DOS的批处理优势,就可以把上面提到的操作进行简化。

    方法 一:

    sc.exe常用功能:

    1、更改服务的启动状态. sc config 服务名 start= 属性(demand 手动、auto 自动、disable 禁用) 设置该服务的启动形式(= 后面有个空格)
    2、删除服务(否则不建议删除任何系统服务,特别是基础服务 慎用)
    3、停止或启动服务(功能上类似于net stop/start,但速度更快且能停止的服务更多)
     
    具体的命令格式:
    修改服务启动类型的命令行格式为(特别注意start=后面有一个空格)
        sc config 服务名称 start= demand(设置服务为手动启动)
        sc config 服务名称 start= auto(设置服务为自动启动)
     sc config 服务名称 start= disabled(设置服务为禁用)
    停止/启动服务的命令行格式为
        sc start 服务名称
     sc stop 服务名称 

     

    注意:服务名称:可以在控制面板->管理工具->服务里面,双击对应的服务显示名来查询。
    例:
    设置远程注册表服务为手动其格式为
    sc config RemoteRegistry start= demand
    设为禁用的格式为
    sc config RemoteRegistry start= disabled
    停止服务则格式为
    sc stop RemoteRegistry

    方法二:

    使用net.exe功能启动或停止服务

    启动/停止 服务的命令行格式为
    net start 服务名称
    net stop 服务名称
    例:
    以启动和停止Oracle服务为例:由于Oracle服务非常占用系统资源,而且平时不怎么用Oracle数据库。所以我将其设为手动启动,然后每次用到Oracle时,使用批处理来启动一堆服务。
    -- 开始Oracle的服务
    @echo off
    net start OracleMTSRecoveryService
    net start OracleOraHome92Agent
    net start OracleOraHome92TNSListener
    net start OracleService数据库名
    --  停止Oracle的服务
    @echo off
    net stop OracleService数据库名
    net stop OracleOraHome92TNSListener
    net stop OracleOraHome92Agent
    net stop OracleMTSRecoveryService

     

    启动方法:
    方法1.保存之后便可以直接通过双击文件即可启动或者关闭服务
    方法2.设置环境变量
    在环境变量中的系统变量中,在PATH后面添加批处理文件的路径,不要忘记用分号;和前面的环境变量隔开,然后直接在开始菜单中的运行中输入可执行相应的文件
    环境变量的作用就是告诉系统在运行中输入信息的位置而已。

    注意:在vista,win7等系统有时直接运行bat文件,很多服务启动不了,会提示拒绝访问等,是因为权限问题,在运行bat文件时要以管理员身份运行即可。


    net start 服务名 开启某服务

    net stop 服务名 关闭某服务

    注:如果服务名有空格,则用双引号括起来。另外服务名不是服务显示的名称,你要右键服务属性才能看到服务名。有时候显示的名称就是服务名。

    常用一些服务的启动停止

    ---sqlserver 相关服务启动---
    @echo.服务启动......
    @echo off
    @sc start MSSQLSERVER
    @sc start SQLSERVERAGENT
    @sc start MSSQLServerOLAPService
    @sc start msftesql
    @sc start MsDtsServer
    @sc start SQLWriter
    @echo off
    @echo.启动完毕!
    @pause

    ---sqlserver 相关服务停止---

    @echo.服务停止......
    @echo off
    @sc stop SQLSERVERAGENT
    @sc stop MSSQLServerOLAPService
    @sc stop msftesql
    @sc stop MsDtsServer
    @sc stop SQLWriter
    @sc stop MSSQLSERVER
    @echo off
    @echo.停止完毕!
    @pause

    注:每行命令前有个@,没有也可以

     

    选择性启动一些服务

    @echo off
    rem echo (备注: 自动:auto 手动启动:demand  禁用:disabled )

     

    sc config knbcenter start=disabled
    sc config PPTVService start=disabled
    sc config 360rp start=disabled
    sc config BFAssistantSvc start=disabled
    (net stop knbcenter)&(net stop PPTVService)&(net stop 360rp)&(net stop BFAssistantSvc)
    echo 已禁用服务:猎豹浏览器安全中心、PPTVService、360rp、BFAssistantSvc..

    echo 选择要开启的服务:
    echo.
    echo    0  全部
    echo    1  猎豹浏览器安全中心
    echo    2  PPTVService
    echo    3  360杀毒实时防护
    echo    4  BFAssistantSvc
    echo.
    set/p var=请选择要开启的服务序号:
    if %var%==0 (net start knbcenter)&(net start PPTVService)&(net start 360rp)&(net start BFAssistantSvc)
    if %var%==1 net start knbcenter
    if %var%==2 net start PPTVService
    if %var%==3 net start 360rp
    if %var%==4 net start BFAssistantSvc

    pause

    IIS相关

    IIS重新启动的dos命令:iisreset /restart

    启动IIS:  
    net start iisadmin    (IIS的整个服务)
    net start w3svc       (WWW网页WEB服务)
    停止IIS:  
    net stop iisadmin /y     (会自动停止www、ftp和smtp服务)

    如果用的IIS自带FTP还可以执行
    net start MSFtpsvc
    命令来启动FTP

     
    以上命令放到bat文件中,再结合windows的任务计划就可以实现调度

     

    自动打开和关闭IE浏览器

     

    使用批处理命令实现自动打开和关闭IE浏览器,把如下两行#号里的内容全部复制,粘贴到记事本,保存为*.bat文件(*号为文件名)。运行即可。
    #####################
    ping 127.1 -n 3 >nul
    rem 延时3秒
    @echo off 
    rem 关闭回显命令 
    cd C:\Program Files\Internet Explorer\
    rem 改变当前目录到IE所在目录 
    rem 打开ie,30秒后关闭
    start iexplore.exe http://localhost:8090/
    rem 启动IE 执行加载路由连接程序 以上地址为例
    ping 127.1 -n 30 >nul
    rem 延时30秒  
    taskkill /im iexplore.exe /f
    rem 关闭IE 
    rem 加载路由成功结束
     
    #####################

    -----另外附一个清理垃圾的bat文件 清理电脑中的垃圾文件.bat---

    @echo off
    echo 正在清除系统垃圾文件,请稍等......
    del /f /s /q %systemdrive%\*.tmp
    del /f /s /q %systemdrive%\*._mp
    del /f /s /q %systemdrive%\*.log
    del /f /s /q %systemdrive%\*.gid
    del /f /s /q %systemdrive%\*.chk
    del /f /s /q %systemdrive%\*.old
    del /f /s /q %systemdrive%\recycled\*.*
    del /f /s /q %windir%\*.bak
    del /f /s /q %windir%\prefetch\*.*
    rd /s /q %windir%\temp & md %windir%\temp
    del /f /q %userprofile%\cookies\*.*
    del /f /q %userprofile%\recent\*.*
    del /f /s /q "%userprofile%\Local Settings\Temporary Internet Files\*.*"
    del /f /s /q "%userprofile%\Local Settings\Temp\*.*"
    del /f /s /q "%userprofile%\recent\*.*"
    echo 清除系统垃圾文件完成!
    echo. & pause

    @echo off  是关闭命令回显

    批量运行exe,bat文件

    .\packet\dotnetfx35.exe /passive
    .\packet\WindowsXP-KB968930-x86-ENG.exe /passive /norestart
    .\packet\WindowsXP-KB942288-v3-x86.exe /passive /forcerestart


    把上面的写在一个文本文件中,存成.bat文件,在同级目录下建一个packet的文件夹,里面放入上面三个路径中的exe文件,运行该bat文件则可以自动运行这三个文件,/passive 是运行选项,有哪些选项可以用 可以在命令行中输入 ****.exe 文件 /?则可以看到所有可用选项
    /norestart 是不重启的意思  
    /forcerestart 是强制重启

    如果想批处理运行一系列的exe文件,均可以这么做
    适合用在批量运行一系列exe文件时,如批量安装,安装补丁包

    上面有一个问题就是会按顺序一个一个执行,第一个运行完才开始第二个,有时需要按顺序执行一系列的exe,bat文件,或者说同时打开则可以这样

    :echo 'automatchworker'
    start AutoMatchWorker.bat
    :echo 'ScheduleWorker'
    start ScheduleWorker.bat
    :echo 'SmsWork'
    start SmsWorker.bat
    :echo 'NotificationWorker'
    start NotificationWorker.bat

    就会“同时”打开四个程序

     

    完整的一个例子如下

    echo 'kill exe'
    taskkill /f /im NotificationWorker.exe
    echo 'copy new exe'
    XCOPY /y D:\ManagerTools\NotificationWorker D:\Workering\PushNotificationWorker
    echo 'start exe'
    ::echo 'PushNotificationWorker'
    start PushNotificationWorker.exe

    先杀掉已运行的exe

    copy 新的程序 /y 表示不用提示覆盖

    再开启

    --------选择性启动某些服务-------

    把下面两行#号中间的复制到bat文件中,双击运行即可
    #########


    @echo off
     
    title 各种服务开启、关闭程序
     
    :allstart
     
    cls
     
    echo 请选择下面的编号来启动相应的服务
     
    echo 1.VMware 服务开启、关闭
     
    echo 2.SQL Server 2008 服务开启、关闭
     
    echo 3.MySQL 服务开启、关闭
     
    echo 4.Oracle XE 服务开启、关闭
     
    echo 5.Teamviewer 服务开启、关闭
     
    echo 6.Alipay 支付宝 服务开启、关闭
     
    echo e.退出
     
    set in=
     
    set /p in=请输入:
     
    if "%in%"=="1" goto vmware
     
    if "%in%"=="2" goto sqlserver
     
    if "%in%"=="3" goto mysql
     
    if "%in%"=="4" goto oraclexe
     
    if "%in%"=="5" goto teamviewer
     
    if "%in%"=="6" goto alipay
     
    if "%in%"=="e" goto allclose
     
    rem VMware服务开启、关闭
     
    :vmware
     
    echo 1.开启vm服务,2.关闭vm服务。3.设置为手动。
     
    echo u.回到上层。e.退出。
     
    set in=
     
    set /p in=请输入:
     
    if "%in%"=="1" goto vmstart
     
    if "%in%"=="2" goto vmstop
     
    if "%in%"=="3" goto vmsd
     
    if "%in%"=="u" goto allstart
     
    if "%in%"=="e" goto allclose
     
    :vmstart
     
    echo "正在启动VMware相关开机服务..."
     
    rem net start ufad-ws60
     
    net start VMAuthdService
     
    net start VMnetDHCP
     
    net start "VMware NAT Service"
     
    net start VMUSBArbServicepause
     
    echo 服务启动完毕!
     
    goto vmware
     
    :vmstop
     
    echo "正在关闭VMware相关开机服务..."
     
    rem net stop ufad-ws60
     
    net stop VMAuthdService
     
    net stop VMnetDHCP
     
    net stop "VMware NAT Service"
     
    net stop VMUSBArbService
     
    echo 服务已关闭!
     
    goto vmware
     
    :vmsd
     
    echo "切换VMware开机启动服务为手动中,请稍候..."
     
    sc config VMAuthdService start= demand
     
    sc config VMnetDHCP start= demand
     
    sc config "VMware NAT Service" start= demand
     
    sc config VMUSBArbService start= demand
     
    echo 成功切换为手动模式!
     
    goto vmware
     
    rem SQL Server 2008服务开启、关闭
     
    :sqlserver
     
    echo 1.开启SQLServer服务,2.关SQLServer服务。3.设置为手动。
     
    echo u.回到上层。e.退出。
     
    set in=
     
    set /p in=请输入:
     
    if "%in%"=="1" goto sqlserverstart
     
    if "%in%"=="2" goto sqlserverstop
     
    if "%in%"=="3" goto sqlserversd
     
    if "%in%"=="u" goto allstart
     
    if "%in%"=="e" goto allclose
     
    :sqlserverstart
     
    echo "正在开启SQL Server相关开机服务"
     
    rem SQL Server 代理 (MSSQLSERVER2008)
     
    net start SQLAgent$MSSQLSERVER2008
     
    rem SQL Full-text Filter Daemon Launcher (MSSQLSERVER2008)
     
    net start MSSQLFDLauncher$MSSQLSERVER2008
     
    rem SQL Server (MSSQLSERVER2008)
     
    net start MSSQL$MSSQLSERVER2008
     
    rem SQL Server Browser
     
    net start SQLBrowser
     
    rem SQL Server Integration Services 10.0
     
    net start MsDtsServer100
     
    rem SQL Server VSS Writer
     
    net start SQLWriter
     
    goto sqlserver
     
    :sqlserverstop
     
    echo "正在关闭SQL Server相关开机服务"
     
    net stop SQLAgent$MSSQLSERVER2008
     
    net stop MSSQLFDLauncher$MSSQLSERVER2008
     
    net stop MSSQL$MSSQLSERVER2008
     
    net stop SQLBrowser
     
    net stop MsDtsServer100
     
    net stop SQLWriter
     
    goto sqlserver
     
    :sqlserversd
     
    echo "切换SQL Server开机启动服务为手动中"
     
    sc config SQLAgent$MSSQLSERVER2008 start= demand
     
    sc config MSSQLFDLauncher$MSSQLSERVER2008 start= demand
     
    sc config MSSQL$MSSQLSERVER2008 start= demand
     
    sc config SQLBrowser start= demand
     
    sc config MsDtsServer100 start= demand
     
    sc config SQLWriter start= demand
     
    echo 成功切换为手动模式
     
    goto sqlserver
     
    rem MySQL服务开启、关闭
     
    :mysql
     
    echo 1.开启mysql服务,2.关闭mysql服务。3.设置为手动。
     
    echo u.回到上层。e.退出。
     
    set in=
     
    set /p in=请输入:
     
    if "%in%"=="1" goto mysqlstart
     
    if "%in%"=="2" goto mysqlstop
     
    if "%in%"=="3" goto mysqlsd
     
    if "%in%"=="u" goto allstart
     
    if "%in%"=="e" goto allclose
     
    :mysqlstart
     
    echo "正在启动MySQL相关开机服务..."
     
    net start MySQL55
     
    echo 服务启动完毕!
     
    goto mysql
     
    :mysqlstop
     
    echo "正在关闭MySQL相关开机服务..."
     
    net stop MySQL55
     
    echo 服务已关闭!
     
    goto mysql
     
    :mysqlsd
     
    echo "切换MySQL开机启动服务为手动中,请稍候..."
     
    sc config MySQL55 start= demand
     
    echo 成功切换为手动模式!
     
    goto mysql
     
    rem Oracle XE 服务开启、关闭
     
    :oraclexe
     
    echo 1.开启oraclexe必要服务,2.关闭oraclexe必要服务。3.设置为手动。
     
    echo u.回到上层。e.退出。
     
    set in=
     
    set /p in=请输入:
     
    if "%in%"=="1" goto oraclexestart
     
    if "%in%"=="2" goto oraclexestop
     
    if "%in%"=="3" goto oraclexesd
     
    if "%in%"=="u" goto allstart
     
    if "%in%"=="e" goto allclose1
     
    :oraclexestart
     
    echo "正在启动oracle xe 必要服务..."
     
    net start OracleMTSRecoveryService
     
    net start OracleXETNSListener
     
    net start OracleServiceXE
     
    echo 服务启动完毕!
     
    goto oraclexe
     
    :oraclexestop
     
    echo "正在关闭oracle xe相关开机服务..."
     
    net stop OracleMTSRecoveryService
     
    net stop OracleXETNSListener
     
    net stop OracleServiceXE
     
    echo 服务已关闭!
     
    goto oraclexe
     
    :oraclexesd
     
    echo "切换oracle xe开机启动服务为手动中,请稍候..."
     
    sc config OracleMTSRecoveryService start= demand
     
    sc config OracleServiceXE start= demand
     
    sc config OracleServiceXE start= demand
     
    sc config OracleXEClrAgent start= demand
     
    sc config OracleXETNSListener start= demand
     
    echo 成功切换为手动模式!
     
    goto oraclexe
     
    rem Teamviewer服务开启、关闭
     
    :teamviewer
     
    echo 1.开启Teamviewer服务,2.关闭Teamviewer服务。3.设置为手动。
     
    echo u.回到上层。e.退出。
     
    set in=
     
    set /p in=请输入:
     
    if "%in%"=="1" goto teamviewerstart
     
    if "%in%"=="2" goto teamviewerstop
     
    if "%in%"=="3" goto teamviewersd
     
    if "%in%"=="u" goto allstart
     
    if "%in%"=="e" goto allclose
     
    :teamviewerstart
     
    echo "正在启动Teamviewer相关开机服务..."
     
    net start TeamViewer7
     
    echo 服务启动完毕!
     
    goto teamviewer
     
    :teamviewerstop
     
    echo "正在关闭Teamviewer相关开机服务..."
     
    net stop TeamViewer7
     
    echo 服务已关闭!
     
    goto teamviewer
     
    :teamviewersd
     
    echo "切换TeamViewer开机启动服务为手动中,请稍候..."
     
    sc config TeamViewer7 start= demand
     
    echo 成功切换为手动模式!
     
    goto teamviewer
     
    rem alipay服务开启、关闭
     
    :alipay
     
    echo 1.开启alipay服务,2.关闭alipay服务。3.设置为手动。
     
    echo u.回到上层。e.退出。
     
    set in=
     
    set /p in=请输入:
     
    if "%in%"=="1" goto alipaystart
     
    if "%in%"=="2" goto alipaystop
     
    if "%in%"=="3" goto alipaysd
     
    if "%in%"=="u" goto allstart
     
    if "%in%"=="e" goto allclose
     
    :alipaystart
     
    net start AliveSvc
     
    net start AlipaySecSvc
     
    goto alipay
     
    :alipaystop
     
    net stop AliveSvc
     
    net stop AlipaySecSvc
     
    goto alipay
     
    :alipaysd
     
    sc config AliveSvc start= demand
     
    sc config AlipaySecSvc start= demand
     
    goto alipay
     
    :allclose
     
    echo 按任意键退出
     
    pause
     
    exit

    #########

    附:如果用windows的计划任务,有个问题要注意下:

    windows 任务计划出现”这项任务的一个实例已在运行 0x8004031F“报错的解决方法

    在任务计划中指定bak脚本,点击运行可以,双击点击脚本也是正常,就任务计划触发条件以后,运行不正常 报错:"这项任务的一个实例已在运行 0x8004031F"

    PS:在任务计划中要确保是最高权限运行的,还要保证填写的触发器和条件没有问题。

    解决方法一:
    **把批处理结尾的pause改成end 或者 去除pause**
    1
    PS: 这种情况一般是脚本中的问题,因为,在定时任务中慎用pause,否则造成弹窗没关闭,下一次任务不会成功执行。

    解决方法二:
    请检查任务计划书里面的任务设置,请选择 “请勿启动新实例” 在选项“如果此任务已经运行,以下规则适用”,环境不同,根据需求选择需要的的选项
    并行运行新实例
     

    --------end------

    

    展开全文
  • scrapy爬虫设置停止条件

    千次阅读 2019-08-29 17:53:44
      使用scrapy做爬虫程序时,时候我们需要在爬虫满足一定条件时,将程序中断掉,从而不再向服务器发送已经没有意义的请求。 一:scrapy中提供的两种停止的方式:  1.在spider中停止爬虫:  在解析函数中调用...

      使用scrapy做爬虫程序时,有时候我们需要在爬虫满足一定条件时,将程序中断掉,从而不再向服务器发送已经没有意义的请求。

    一:scrapy中提供的两种停止的方式

     1.在spider中停止爬虫:

     在解析函数中调用内置函数

    self.crawler.engine.close_spider(self, "当调用此方法时打印信息为:无有效信息,关闭spider")
    

      设置条件,当满足一定的条件时执行此代码,则可以停止掉爬虫程序。但是经过我的反复试验,执行此代码之后爬虫程序并不会立即关闭,而是还会运行一段时间。
      造成这种现象存在两种可能:
      (1).调用关闭方法之后会将请求队列中的所有的url请求完之后才会完全停止。
      (2).在执行此语法后,所在的解析函数不再产生新的url进入队列中,但是后续的解析函数还是会执行,一直到后面的所有的解析函数全部完成。
    (经过几次试验,发现是第二种可能,但又不完全确定,如果有大神知道此处的逻辑,可以交流一下)

     2.在pipeline中停止爬虫:

    类似于上面的方式,只不过是在pipeline中执行

    spider.crawler.engine.close_spider(spider, "无有效信息,关闭spider")  # pepline 中使用此关闭方法
    

    调用此语法之后同样有上面的没有立即停止的情况。

    二:使用os关闭程序

    此方法与scrapy内置的关闭方法相似,只不过是使用os强制关闭进程。
    首先导入os包

    import os  # 引入os包
    

    然后跟前面的方法类似,设置条件,当满足条件时执行

    os.exit()
    

    这样就可以直接强制性的关闭进程。

    展开全文
  • ssh用法及命令

    万次阅读 多人点赞 2016-08-21 22:15:43
    $ ssh user@host 'ps ax | grep [h]ttpd' lz建议使用scp进行远程copy: scp 跨机远程拷贝 scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨...

    http://blog.csdn.net/pipisorry/article/details/52269785

    什么是SSH?

    简单说,SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。
    SSH只是一种协议,存在多种实现,既有商业实现,也有开源实现。本文针对的实现是OpenSSH,它是自由软件,应用非常广泛。这里只讨论SSH在Linux Shell中的用法。如果要在Windows系统中使用SSH,会用到另一种软件PuTTY,这需要另文介绍。

    中间人攻击
    SSH之所以能够保证安全,原因在于它采用了公钥加密。
    整个过程是这样的:(1)远程主机收到用户的登录请求,把自己的公钥发给用户。(2)用户使用这个公钥,将登录密码加密后,发送回来。(3)远程主机用自己的私钥,解密登录密码,如果密码正确,就同意用户登录。
    这个过程本身是安全的,但是实施的时候存在一个风险:如果有人截获了登录请求,然后冒充远程主机,将伪造的公钥发给用户,那么用户很难辨别真伪。因为不像https协议,SSH协议的公钥是没有证书中心(CA)公证的,也就是说,都是自己签发的。
    可以设想,如果攻击者插在用户与远程主机之间(比如在公共的wifi区域),用伪造的公钥,获取用户的登录密码。再用这个密码登录远程主机,那么SSH的安全机制就荡然无存了。这种风险就是著名的"中间人攻击"(Man-in-the-middle attack)。

    ssh的安装

    SSH分客户端openssh-client和openssh-server

    如果你只是想登陆别的机器的SSH只需要安装openssh-client(ubuntu有默认安装,如果没有则sudoapt-get install openssh-client),如果要使本机开放SSH服务就需要安装openssh-server。

    Ubuntu/win10(powershell)缺省已经安装了ssh client。

    #配置ssh#

    echo -e "\033[31;1m ******************************* \033[0m"
    echo -e "\033[31;1m ************安装和配置ssh************ \033[0m"
    sudo apt-get install -y openssh-server 1> /dev/null
    sudo sed -i 's/UsePAM no/UsePAM yes/g' /etc/ssh/sshd_config
    sudo sed -i '8a /etc/init.d/ssh start' /etc/profile
    sudo /etc/init.d/ssh start
    ps -e | grep ssh

    echo -e "\033[31;1m ssh授权 \033[0m"
    cd ~/.ssh/
    ssh-keygen -t rsa
    cat ./id_rsa.pub >> ./authorized_keys

    $ ps -e|grep ssh
     2151 ?        00:00:00 ssh-agent

     5313 ?        00:00:00 sshd

    ssh-agent表示ssh-client启动,sshd表示ssh-server启动了。

    如果缺少sshd,说明ssh服务没有启动或者没有安装。

    配置ssh并连接github/gitlab

    参考[Git版本控制:Git远程仓库]

    皮皮blog

    SSH基本用法

    SSH远程登录

    口令登录

    假定你要以用户名user,登录远程主机host,只要一条简单命令就可以了。
          $ ssh user@host  如:ssh pika@192.168.0.111
    如果本地用户名与远程用户名一致,登录时可以省略用户名。
          $ ssh host
    SSH的默认端口是22,也就是说,你的登录请求会送进远程主机的22端口。使用p参数,可以修改这个端口。
          $ ssh -p 2222 user@host
    上面这条命令表示,ssh直接连接远程主机的2222端口。
    如果你是第一次登录对方主机,系统会出现下面的提示:
          $ ssh user@host
          The authenticity of host 'host (12.18.429.21)' can't be established.
          RSA key fingerprint is 98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d.
          Are you sure you want to continue connecting (yes/no)?
    这段话的意思是,无法确认host主机的真实性,只知道它的公钥指纹,问你还想继续连接吗?
    所谓"公钥指纹",是指公钥长度较长(这里采用RSA算法,长达1024位),很难比对,所以对其进行MD5计算,将它变成一个128位的指纹。上例中是98:2e:d7:e0:de:9f:ac:67:28:c2:42:2d:37:16:58:4d,再进行比较,就容易多了。
    很自然的一个问题就是,用户怎么知道远程主机的公钥指纹应该是多少?回答是没有好办法,远程主机必须在自己的网站上贴出公钥指纹,以便用户自行核对。
    假定经过风险衡量以后,用户决定接受这个远程主机的公钥。
          Are you sure you want to continue connecting (yes/no)? yes
    系统会出现一句提示,表示host主机已经得到认可。
          Warning: Permanently added 'host,12.18.429.21' (RSA) to the list of known hosts.
    然后,会要求输入密码。
          Password: (enter password)
    如果密码正确,就可以登录了。
    当远程主机的公钥被接受以后,它就会被保存在文件$HOME/.ssh/known_hosts之中。下次再连接这台主机,系统就会认出它的公钥已经保存在本地了,从而跳过警告部分,直接提示输入密码。
    每个SSH用户都有自己的known_hosts文件,此外系统也有一个这样的文件,通常是/etc/ssh/ssh_known_hosts,保存一些对所有用户都可信赖的远程主机的公钥。

    公钥登录

    使用密码登录,每次都必须输入密码,非常麻烦。好在SSH还提供了公钥登录,可以省去输入密码的步骤。
    所谓"公钥登录",原理很简单,就是用户将自己的公钥储存在远程主机上。登录的时候,远程主机会向用户发送一段随机字符串,用户用自己的私钥加密后,再发回来。远程主机用事先储存的公钥进行解密,如果成功,就证明用户是可信的,直接允许登录shell,不再要求密码。
    这种方法要求用户必须提供自己的公钥。如果没有现成的,可以直接用ssh-keygen生成一个:
          $ ssh-keygen
    运行上面的命令以后,系统会出现一系列提示,可以一路回车。其中有一个问题是,要不要对私钥设置口令(passphrase),如果担心私钥的安全,这里可以设置一个。
    运行结束以后,在$HOME/.ssh/目录下,会新生成两个文件:id_rsa.pub和id_rsa。前者是你的公钥,后者是你的私钥。
    这时再输入下面的命令,将公钥传送到远程主机host上面:
          $ ssh-copy-id user@host
    好了,从此你再登录,就不需要输入密码了。
    如果还是不行,就打开远程主机的/etc/ssh/sshd_config这个文件,检查下面几行前面"#"注释是否取掉。
          RSAAuthentication yes
          PubkeyAuthentication yes
          AuthorizedKeysFile .ssh/authorized_keys
    然后,重启远程主机的ssh服务。
          // ubuntu系统
          service ssh restart
          // debian系统
          /etc/init.d/ssh restart
    authorized_keys文件
    远程主机将用户的公钥,保存在登录后的用户主目录的$HOME/.ssh/authorized_keys文件中。公钥就是一段字符串,只要把它追加在authorized_keys文件的末尾就行了。
    这里不使用上面的ssh-copy-id命令,改用下面的命令,解释公钥的保存过程:
          $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    这条命令由多个语句组成,依次分解开来看:(1)"$ ssh user@host",表示登录远程主机;(2)单引号中的mkdir .ssh && cat >> .ssh/authorized_keys,表示登录后在远程shell上执行的命令:(3)"$ mkdir -p .ssh"的作用是,如果用户主目录中的.ssh目录不存在,就创建一个;(4)'cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub的作用是,将本地的公钥文件~/.ssh/id_rsa.pub,重定向追加到远程文件authorized_keys的末尾。
    写入authorized_keys文件后,公钥登录的设置就完成了。

    [SSH原理与运用(一):远程登录]

    使用ssh在远程后台不中断地跑程序

    Linux关闭ssh(关闭终端等)后运行的程序或者服务自动停止,如python3 a.py &。

    解决:使用nohup命令让程序在关闭窗口(切换SSH连接)的时候程序还能继续在后台运行。

    nohup python3 a.py &

    [linux进程管理与SELinux]

    ssh连接中断

    如果使用的是iTerm2,要让ssh不断线: profiles -> sessions -> When idel, send ASCII code

    其它命令行客户端,通过配置 ServerAliveInterval 来实现,在 ~/.ssh/config 中加入: ServerAliveInterval=30。表示ssh客户端每隔30秒给远程主机发送一个no-op包,no-op是无任何操作的意思,这样远程主机就不会关闭这个SSH会话。

    vim ~/.ssh/config,然后新增

    Host *
        ServerAliveInterval 60
    60秒就好了,而且基本去连的机器都保持,所以配置了*,如果有需要针对某个机器,可以自行配置为需要的serverHostName。

    [ssh保持连接不断开]

    皮皮blog

    SSH远程操作

    SSH数据传输

    SSH不仅可以用于远程主机登录,还可以直接在远程主机上执行操作。
          $ ssh user@host 'mkdir -p .ssh && cat >> .ssh/authorized_keys' < ~/.ssh/id_rsa.pub
    单引号中间的部分,表示在远程主机上执行的操作;后面的输入重定向,表示数据通过SSH传向远程主机。
    这就是说,SSH可以在用户和远程主机之间,建立命令和数据的传输通道,因此很多事情都可以通过SSH来完成。
    下面看几个例子。
    【例1】
    将$HOME/src/目录下面的所有文件,复制到远程主机的$HOME/src/目录。
          $ cd && tar czv src | ssh user@host 'tar xz'
    【例2】
    将远程主机$HOME/src/目录下面的所有文件,复制到用户的当前目录。
          $ ssh user@host 'tar cz src' | tar xzv
    【例3】
    查看远程主机是否运行进程httpd。
          $ ssh user@host 'ps ax | grep [h]ttpd'

    lz建议使用scp进行远程copy:

    scp 跨机远程拷贝

    scp是secure copy的简写,用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,不过cp只是在本机进行拷贝不能跨服务器,而且scp传输是加密的。可能会稍微影响一下速度。两台主机之间复制文件必需得同时有两台主机的复制执行帐号和操作权限。

    scp命令参数

    • -1 强制scp命令使用协议ssh1
    • -2 强制scp命令使用协议ssh2
    • -4 强制scp命令只使用IPv4寻址
    • -6 强制scp命令只使用IPv6寻址
    • -B 使用批处理模式(传输过程中不询问传输口令或短语)
    • -C 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)
    • -p 留原文件的修改时间,访问时间和访问权限。
    • -q 不显示传输进度条。
    • -r 递归复制整个目录。
    • -v 详细方式显示输出。scp和ssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。
    • -c cipher 以cipher将数据传输进行加密,这个选项将直接传递给ssh。
    • -F ssh_config 指定一个替代的ssh配置文件,此参数直接传递给ssh。
    • -i identity_file 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。
    • -l limit 限定用户所能使用的带宽,以Kbit/s为单位。
    • -o ssh_option 如果习惯于使用ssh_config(5)中的参数传递方式,
    • -P port 注意是大写的P, port是指定数据传输用到的端口号
    • -S program 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

    scp一般有六种使用方法
    本地复制远程文件:(把远程的文件复制到本地)
    scp root@www.test.com:/val/test/test.tar.gz /val/test/test.tar.gz
    远程复制本地文件:(把本地的文件复制到远程主机上)
    scp /val/test.tar.gz root@www.test.com:/val/test.tar.gz
    本地复制远程目录:(把远程的目录复制到本地)
    scp -r root@www.test.com:/val/test/ /val/test/
    远程复制本地目录:(把本地的目录复制到远程主机上)
    scp -r ./ubuntu_env/ root@192.168.0.111:/home/pipi
    pika:/media/pika/files/machine_learning/datasets$scp -r SocialNetworks/ piting@192.168.0.172:/media/data/pipi/datasets

    本地复制远程文件到指定目录:(把远程的文件复制到本地)
    scp root@www.test.com:/val/test/test.tar.gz /val/test/
    远程复制本地文件到指定目录:(把本地的文件复制到远程主机上)
    scp /val/test.tar.gz root@www.test.com:/val/

    ps: scp复制文件时只指定服务器地址不加路径默认复制到哪里???

    [12个scp传输文件的命令栗子]

    [scp 跨机远程拷贝]

    SSH端口操作

    绑定本地端口

    既然SSH可以传送数据,那么我们可以让那些不加密的网络连接,全部改走SSH连接,从而提高安全性
    假定我们要让8080端口的数据,都通过SSH传向远程主机,命令就这样写:
          $ ssh -D 8080 user@host
    SSH会建立一个socket,去监听本地的8080端口。一旦有数据传向那个端口,就自动把它转移到SSH连接上面,发往远程主机。可以想象,如果8080端口原来是一个不加密端口,现在将变成一个加密端口。

    本地端口转发

    有时,绑定本地端口还不够,还必须指定数据传送的目标主机,从而形成点对点的"端口转发"。为了区别后文的"远程端口转发",我们把这种情况称为"本地端口转发"(Local forwarding)。
    假定host1是本地主机,host2是远程主机。由于种种原因,这两台主机之间无法连通。但是,另外还有一台host3,可以同时连通前面两台主机。因此,很自然的想法就是,通过host3,将host1连上host2。
    我们在host1执行下面的命令:
          $ ssh -L 2121:host2:21 host3
    命令中的L参数一共接受三个值,分别是"本地端口:目标主机:目标主机端口",它们之间用冒号分隔。这条命令的意思,就是指定SSH绑定本地端口2121,然后指定host3将所有的数据,转发到目标主机host2的21端口(假定host2运行FTP,默认端口为21)。
    这样一来,我们只要连接host1的2121端口,就等于连上了host2的21端口。
          $ ftp localhost:2121
    "本地端口转发"使得host1和host3之间仿佛形成一个数据传输的秘密隧道,因此又被称为"SSH隧道"。
    下面是一个比较有趣的例子。
          $ ssh -L 5900:localhost:5900 host3
    它表示将本机的5900端口绑定host3的5900端口(这里的localhost指的是host3,因为目标主机是相对host3而言的)。
    另一个例子是通过host3的端口转发,ssh登录host2。
          $ ssh -L 9001:host2:22 host3
    这时,只要ssh登录本机的9001端口,就相当于登录host2了。
          $ ssh -p 9001 localhost

    上面的-p参数表示指定登录端口。

    出错处理:ssh: Could not resolve hostname 192.168.*.*:***: Name or service not known

    解决:指定端口不能直接使用ip:端口号,使用-p参数来解决就可以了。

    远程端口转发

    既然"本地端口转发"是指绑定本地端口的转发,那么"远程端口转发"(remote forwarding)当然是指绑定远程端口的转发。
    还是接着看上面那个例子,host1与host2之间无法连通,必须借助host3转发。但是,特殊情况出现了,host3是一台内网机器,它可以连接外网的host1,但是反过来就不行,外网的host1连不上内网的host3。这时,"本地端口转发"就不能用了,怎么办?
    解决办法是,既然host3可以连host1,那么就从host3上建立与host1的SSH连接,然后在host1上使用这条连接就可以了。
    我们在host3执行下面的命令:
          $ ssh -R 2121:host2:21 host1
    R参数也是接受三个值,分别是"远程主机端口:目标主机:目标主机端口"。这条命令的意思,就是让host1监听它自己的2121端口,然后将所有数据经由host3,转发到host2的21端口。由于对于host3来说,host1是远程主机,所以这种情况就被称为"远程端口绑定"。
    绑定之后,我们在host1就可以连接host2了:
          $ ftp localhost:2121
    这里必须指出,"远程端口转发"的前提条件是,host1和host3两台主机都有sshD和ssh客户端。

    皮皮blog

    SSH的其他参数

    SSH还有一些别的参数,也值得介绍。
    N参数,表示只连接远程主机,不打开远程shell;T参数,表示不为这个连接分配TTY。这个两个参数可以放在一起用,代表这个SSH连接只用来传数据,不执行远程操作。
          $ ssh -NT -D 8080 host
    f参数,表示SSH连接成功后,转入后台运行。这样一来,你就可以在不中断SSH连接的情况下,在本地shell中执行其他操作。
          $ ssh -f -D 8080 host
    要关闭这个后台连接,就只有用kill命令去杀掉进程。

    [SSH原理与运用(二):远程操作与端口转发]

    皮皮blog

    from: http://blog.csdn.net/pipisorry/article/details/52269785

    ref: [Ubuntu环境下SSH的安装及使用]

    [25个必须记住的SSH命令]*

    [Linux 下 SSH 命令实例指南]*

    [数字签名是什么?]

    [  * SSH, The Secure Shell: The Definitive Guide: 2.4. Authentication by Cryptographic Key, O'reilly

      * SSH, The Secure Shell: The Definitive Guide: 9.2. Port Forwarding, O'reilly

      * Shebang: Tips for Remote Unix Work (SSH, screen, and VNC)

      * brihatch: SSH Host Key Protection

      * brihatch: SSH User Identities

      * IBM developerWorks: 实战 SSH 端口转发

      * Jianing YANG:ssh隧道技术简介

      * WikiBooks: Internet Technologies/SSH

      * Buddhika Chamith: SSH Tunneling Explained

    ]

    展开全文
  • Oracle启动停止命令 (收藏)

    万次阅读 2007-03-05 10:18:00
     服务端安装前提条件:操作系统为WINDOWS 2000、WINDOWS NT。  步骤:  1) 找到ORACLE 8.1.6的安装目录,点击SETUP.EXE文件,进入"Oracle Universal Installer"界面;    2) 在弹出的窗体中选择"下一步"继续...
  • redis scan命令

    千次阅读 2019-08-12 13:31:08
    redis是当前使用很广泛的一款内存key-value软件,有时需要查询下目前redis内存里面哪些满足条件的键值,在线上系统一定不要使用keys命令,该命令会导致redis停止一切工作,如果redis键值要很多的话会导致redis长...
  • linux系列之常用运维命令整理笔录

    万次阅读 多人点赞 2019-10-28 17:33:21
    本博客记录工作中需要的linux运维命令,大学时候开始接触linux,会一些基本操作,可是都没有整理起来,加上是做开发,不做运维,有些命令忘记了,所以现在整理成博客,当然vi,文件操作等就不介绍了,慢慢积累一些...
  • linux循环执行命令的shell(bash)脚本 使用方法 新建.sh文件,并将下面的代码复制进去 修改main函数部分代码 loop_exe函数会循环执行知道命令知道成功为止 传参为所想要执行的命令(主要要用双引号包起来) 给...
  • Linux常用命令

    千次阅读 2019-03-11 23:52:27
      本文介绍的是Linux中的常用命令用以满足日常的操作,但并非所有命令。更详细的命令烦请参考手册 http://man.linuxde.net/ Linux常用命令 1.修改基本配置 1.1修改主机名 vi /etc/sysconfig/network 1.2...
  • grep命令用于查找文件里符合条件的字符串 grep是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。 2、grep命令语法 grep [-abcEFGhHilLnqrsvVwxy][-A][-B][-C][-d][-e][-f][--...
  • 常用Git命令

    千次阅读 多人点赞 2019-09-26 16:12:59
    文章目录Git简介配置用户名和邮箱配置https和ssh推送时保存用户名和密码推送到远程仓库正确流程一、新建本地仓库二、配置(全局和项目)三、增加/删除文件四、代码提交五、分支六、标签七、...:Git常用命令速查表附...
  • Linux超全命令总结,看这一篇就够了,建议小伙伴们先收藏后阅读!!
  • Linux运维常用命令汇总

    万次阅读 2017-12-02 00:16:23
    线上查询及帮助命令 (2 个) man查看命令帮助,命令的词典,更复杂的还有 info,但不常用。  help查看 Linux 内置命令的帮助,比如 cd 命令。 文件和目录操作命令 (18 个) ls全拼 list,功能是列出...
  • 最新 Linux 命令总结 大全

    千次阅读 多人点赞 2021-07-02 19:35:43
    今天,带来一篇 Linux 命令总结的非常全的文章,也是我们平时工作中使用率非常高的操作命令命令有点多,建议小伙伴们可以先收藏后阅读。 目录1. 基本命令2. 关机3. 文件和目录4. 文件搜索5. 挂载一个文件系统6. ...
  • Linux命令(1)—— xargs 命令

    千次阅读 2017-01-08 15:18:09
    因为以空格作为分隔符,所以一些文件名或者其他意义的名词内含有空格的时候,xargs可能会误判。简单来说,xargs是给其他命令传递参数的一个过滤器,是构建单行命令的重要组件之一。之所以要用到xargs,是因为由于...
  • 文章目录帮助命令镜像命令镜像检索镜像下载镜像列表镜像删除容器命令搜索镜像下载镜像运行容器端口映射启动做端口映射的容器端口映射格式查看端口映射小结查看容器停止容器启动容器重启容器删除容器其他重要命令查看...
  • 文章目录linux 系统命令总结大全关于作者**作者介绍**0.IP 地址相关命令0.1 ifconfig 命令 ---显示网络设备信息02.ip 命令 ---显示与操作路由03.dhclient 命令 --- 动态获取或释放IP地址04.nmtui ---界面修改网卡...
  • ps 命令详解

    万次阅读 多人点赞 2016-12-03 16:42:03
    From:... 进程和作业管理命令:http://man.linuxde.net/sub/进程和作业管理 Linux 关于 进程/线程 的命令 kill 和 pgrep 和 pidof 和 awk 和 pkill 和 killall:https://blog.csdn.net/freeki...
  • top命令的load average是什么意思?

    千次阅读 2010-07-21 00:44:00
    top命令的load average是什么意思?
  • Linux系统常用基本命令总结

    万次阅读 多人点赞 2018-11-13 22:42:20
    Linux基本命令 Linux的简介 Linux的厂商 Linux的目录结构 基于虚拟机的环境搭建 常用命令与示例 一、文件基本操作命令 1. ls命令 2. pwd命令 3. mkdir命令 4. cd命令 5. touch命令 6. cp命令 7. mv命令...
  • Linux系统常见命令

    千次阅读 多人点赞 2019-10-28 13:44:45
    ###Linux基本命令 Linux系统经典语录: ...命令 +空格+条件/参数+空格+对象/目录/文件 例如:rm -f /oldboy 二 .关机或重启命令 shutdown命令 [-r] 重新启动 [-h] 关机 [-c] 取消关机/重启 [-t] ...
  • cmd 命令 大全

    万次阅读 多人点赞 2019-01-29 13:09:02
    前言: CMD是什么?在windows环境下,命令行程序为cmd...是一个32位的命令行程序,微软Windows系统基于Windows上的命令解释程序。 类似于微软的DOS操作系统。输入一些命令,cmd.exe可以执行。 比如输入shutdown ...
  • windbg常用命令

    万次阅读 2014-03-03 22:29:56
    基本知识和常用命令(1) Windbg下载地址http://msdn.microsoft.com/en-us/windows/hardware/gg463009.aspx安装完后执行windbg –I将Windbg设置成默认调试器 (2) Windbg的命令分为标准命令,原命令和扩展命令,...
  • docker系列一 docker 安装和常用命令

    千次阅读 多人点赞 2017-03-02 19:26:55
    前置条件 Docker 服务命令 Docker 镜像命令 查看images 搜索docker docker命令来下载镜像 删除镜像命令为docker rmi Docker 容器命令 根据镜像创建容器并启动 查看运行中的容器列表 启动容器 停止容器 查看容器的...
  • DOS命令

    千次阅读 2010-01-03 22:41:00
    CALL 从另一个批处理程序调用这一个。CD 显示当前目录的名称或将其更改。...CMD 打开另一个 Windows 命令解释程序窗口。COLOR 设置默认控制台前景和背景颜色。COMP 比较两个或两套文件的内容。COMPACT
  • Linux常用命令介绍

    万次阅读 2016-06-10 20:32:20
    在使用Linux操作系统的过程中,我们经常要用到一些特殊的命令,不仅显示了技术的高超,而且在效率方面当然要比图像化界面高很多,下面我总结了一些常见的Linux命令,供以后学习使用,使用命令时,在命令后面加参数...
  • 无论新手或老油条,都需要一套自己的Git命令字典,方便随时使用。本文基本上涵盖了常用到的所有Git命令,足矣让我们得心应手的在公司使用Git管理代码。 前车之鉴,后事之师。希望我的文章们能帮助你少走些弯路。...
  • Linux常用命令大全

    万次阅读 多人点赞 2018-06-01 16:16:10
    Linux常用命令大全1.Linux管理文件和目录的命令命令 功能 命令 功能 pwd 显示当前目录 ls 查看目录下的内容 cd 改变所在目录 cat 显示文件的内容 grep 在文件中查找某字符 cp 复制文件 touch 创建文件 mv 移动文件 ...
  • systemctl命令解析

    千次阅读 2018-10-16 20:04:12
    原文链接如果有效,请点击原文链接查看。 ... 一、由来 历史上,Linux 的启动一直采用init进程。 下面的命令用来启动服务。 $ sudo /etc/init.d/apache2 start # 或者 $ service apache2 st...
  • VS 2019 命令提示符 相关命令

    千次阅读 2019-08-02 14:24:44
    有关某个命令的详细信息,请键入 HELP 命令命令 解释 ASSOC 显示或修改文件扩展名关联。 ATTRIB 显示或更改文件属性。 BREAK 设置或清除扩展式 CTRL+C 检查。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 157,770
精华内容 63,108
热门标签
关键字:

命令是有条件停止