linux笔记(计划任务和虚拟环境)

一、计划任务crond服务

  1. 什么是计划任务:

     后台运行,到了预定的时间就会自动执行的任务,前提是:事先手动将计划任务设定好。这就用到了crond服务
    
  2. crond服务相关的软件包

     [root@MiWiFi-R3-srv ~]# rpm -qa |grep cron
     cronie-anacron-1.4.11-14.el7.x86_64
     crontabs-1.11-6.20121102git.el7.noarch
     cronie-1.4.11-14.el7.x86_64
    
     这些包在最小化安装系统时就已经安装了,并且会开机自启动crond服务,并为我们提供好编写计划任务的crontab命令。
    
     crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似
     rontab (选项)(参数)
     -e:编辑该用户的计时器设置;
     -l:列出该用户的计时器设置;
     -r:删除该用户的计时器设置;
     -u<用户名称>:指定要设定计时器的用户名称。
     存放定时任务的文件
     /var/spool/cron
     注意:
    
     1 查看计划任务的执行:tail -f /var/log/cron
    
     2 写计划任务时,命令必须加上绝对路径,否则会出现这种情况:从日志中看,确实触发了计划任务的执行,但是命令却没有执行成功,比如 * reboot就会出现这种情况,需要将reboot写成/usr/sbin/reboot
    
     \3. 计划任务执行的命令 是否存在,软件是否安装
    
     \4. 确保crontab服务运行
    
     systemctl status cron
     ps -ef|grep crond
     5. 检测crontab是否开机启动
    
     systemctl is-enabled crond
     在/etc目录下有一个crontab文件,这个就是系统任务调度的配置文件
     SHELL=/bin/bash
     PATH=/sbin:/bin:/usr/sbin:/usr/bin
     MAILTO=root
     # For details see man 4 crontabs
     # Example of job definition:
     # .---------------- minute (0 - 59)
     # |  .------------- hour (0 - 23)
     # |  |  .---------- day of month (1 - 31)
     # |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
     # |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
     # |  |  |  |  |
     # *  *  *  *  * user-name  command to be executed
      分 时  日 月  周	
    

    在这里插入图片描述
    实例

     每天8.30上班
     30 08 * * *  去上班
     每天12下班回家睡觉
     00 00 * * *   回家睡觉
    

    所有命令一定要用绝对路径来写!

     #每分钟执行一次命令
     * * * * * 命令
     #每小时的3,15分组执行命令
     3,15 * * * * 命令
     #在上午8-11点的第3和第15分钟执行
     3,15 8-11 * * * 命令
     #每晚21:30执行命令
     30 21 * * * 命令
     #没周六、日的1:30执行命令
     30 1 * * 6,0 命令
     #每周一到周五的凌晨1点,清空/tmp目录的所有文件
     0 1 * * 1-5 /usr/bin/rm -rf /tmp/*
     #每晚的21:30重启nginx
     30 21 * * * /opt/nginx/sbin/nginx -s reload
     #每月的1,10,22日的4:45重启nginx
     45 4 1,1,10,22 * * /opt/nginx/sbin/nginx -s reload
     #每个星期一的上午8点到11点的第3和15分钟执行命令
     3,15 8-11 * * 1 command
    
  3. ubantu下的crond(https://www.cnblogs.com/michaelzhao10/p/4875719.html)

    1)开启crontab日志

     crontab默认情况下是不执行开启日子的,所以一开始写完后,不能执行,想查看日志,却找不到。所以先开启定时任务的日志来查看
    

    2)修改rsyslog服务,将 /etc/rsyslog.d/50-default.conf 文件中的 #cron.* 前的 # 删掉;用以下命令重启rsyslog服务:

     service rsyslog restart;
    

    3)然后再重启crontab服务:

     service cron restart;
    

    网上很多人说开启,停止或者重启contab服务用命令 service crond restart,执行这个命令会报出 unrecognised service ,这里吧 crond 改成 cron 就可以了。

    之后,在这个位置 /var/log/cron.log 就可以查看定时任务的文件日志文件了;

    下面这个命令还可以查看crontab的状态

    service cron status;
    

    4)查看运行时的日志文件,如果在日志文件中执行一条语句后出现:

     No MTA installed, discarding output
    

    则crontab执行脚本时是不会直接错误的信息输出,而是会以邮件的形式发送到邮箱里,需要邮件服务器了,如果没有安装邮件服务器,它就会报这个错。

    可以在每条定时脚本后面加入:>/dev/null 2>&1即将所有信息输入到linux系统中的空设备/dev/null中。即可解决No MTA installed, discarding output的问题。

    5)写定时任务

    通过如下命令,就可以开启本用户的定时文件,文件存放在 /var/spool/cron/crontabs 文件夹下并且以用的的名字命名的文件

     crontab -e
    

    可以通过以下命令列出某个用户cron服务的详细内容

     crontab -l
    

    我先写了个定时任务测试以下,用php写了一个功能,每分钟向数据库中写入一条数据,定时任务每分钟执行url就可以

     1 *    * * *   curl  servername/Home/Test/test   >/dev/null 2>&1
    

    curl也是Ubuntu自带的,不用另外安装。此条命令单独在命令行执行是可以的。

    在crontab中发现好像不能执行,后来发现每分钟不能这样写,分钟位要写成 */1,才能执行,下面是从别人那拷贝过来的几个命令,不过我都试过

     每五分钟执行  */5 * * * *
    
     每小时执行     0 * * * *
    
     每天执行        0 0 * * *
    
     每周执行       0 0 * * 0
    
     每月执行        0 0 1 * *
    
     每年执行       0 0 1 1 *
    

    6)在最终能用之前我还运行过以下命令,是给root赋权限。但是在我最终能运行时,我不知道这条命令有没有起作用。不过还是先写上。运行后需要重启crontab服务

     crontab -u root /var/spool/cron/crontabs/root
    

    之前不能运行的时候,看到很多人说不能运行是环境变量的问题,需要修改。不过我这次并没有遇到。不过先记下来。以后可能会用到。

    我用的是root用户写的定时任务,并且看到他人写的下面内容,下次试一下

     /etc/cron.deny 表示不能使用crontab 命令的用户
    
     /etc/cron.allow 表示能使用crontab的用户。
    
     如果两个文件同时存在,那么/etc/cron.allow 优先。
    
     如果两个文件都不存在,那么只有超级用户可以安排作业。
    

二、虚拟环境

  1. 安装配置virtualenv
    #指定清华源下载pip的包

     pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
    

    #升级pip工具

     pip3 install --upgrade pip
    

    1.安装virtualenv

     pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
    

    2.创建目录

     mkdir Myproject
     cd Myproject
    

    3.创建独立运行环境-命名

     virtualenv --no-site-packages --python=python3  venv#得到独立第三方包的环境,并且指定解释器是python3
    

    4.进入虚拟环境

     source venv/bin/activate#此时进入虚拟环境(venv)Myproject
    

    5.安装第三方包

     (venv)Myproject: pip3 install django==1.9.8
     #此时pip的包都会安装到venv环境下,venv是针对Myproject创建的
    

    6.退出venv环境

     deactivate命令
    

    7.virtualenv是如何创建“独立”的Python运行环境的呢?

     原理很简单,就是把系统Python复制一份到virtualenv的环境,
     用命令source venv/bin/activate进入一个virtualenv环境时,
     virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。
    

    8.确保开发环境的一致性

     	1.假设我们在本地开发环境,准备好了项目+依赖包环境
     	2.现在需要将项目上传至服务器,上线发布
     	3.那么就要保证服务器的python环境一致性
     	解决方案:
     		1.通过命令保证环境的一致性,导出当前python环境的包
     		pip3 freeze > requirements.txt   
     		这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。
     		可以使用 “pip list”在不产生requirements文件的情况下, 查看已安装包的列表。
     		2.上传至服务器后,在服务器下创建virtualenv,在venv中导入项目所需的模块依赖
     		pip3 install -r requirements.txt
    
  2. virtualenvwrapper讲解
    virtualenv 的一个最大的缺点就是:

    每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。

    并且还有可能你忘记了虚拟环境放在哪。。。

    一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,例如/opt/all_venv/,并且针对不同的目录做不同的事。
    使用virtualenvwrapper管理你的虚拟环境(virtualenv),其实他就是统一管理虚拟环境的目录,并且省去了source的步骤。
    安装virtualenvwrapper
    #安装

    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenvwrapper
    

    #设置环境变量,每次开机加载virtualevnwrapper

    export WORKON_HOME=~/Envs   #设置virtualenv的统一管理目录
    export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的参数,生成干净隔绝的环境
    export VIRTUALENVWRAPPER_PYTHON=/opt/python3/bin/python3     #指定python解释器
    source /opt/python34/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
    

    读取文件,使得生效,此时已经可以使用virtalenvwrapper
    管理虚拟环境的命令
    virtualenvwrapper 提供环境名字的tab补全功能。
    当有很多环境, 并且很难记住它们的名字时,这就显得很有用。

    创建一个虚拟环境:

    mkvirtualenv my_django115
    

    这会在 ~/Envs 中创建 my_django115 文件夹。
    激活虚拟环境my_django115

    workon my_django115
    

    也可以手动停止虚拟环境

    deactivate
    

    删除虚拟环境,需要先退出虚拟环境

    rmvirtualenv my_django115
    lsvirtualenv
    

    列举所有的环境。

    cdvirtualenv
    

    导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages 。

    cdsitepackages
    

    和上面的类似,但是是直接进入到 site-packages 目录中。

    lssitepackages
    

    显示 site-packages 目录中的内容。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux是一种开源的操作系统内核,而CentOS则是一种基于Linux内核的发行版。下面是关于Linux和CentOS的一些笔记: 1. Linux操作系统: - Linux是一种开源操作系统内核,最初由Linus Torvalds于1991年创建。 - Linux操作系统具有高度的可定制性和灵活性,适用于各种设备,包括个人电脑、服务器、嵌入式系统等。 - Linux支持多用户、多任务和多线程,并提供了丰富的命令行工具和图形界面。 - 常见的Linux发行版包括Ubuntu、Debian、Fedora、CentOS等。 2. CentOS发行版: - CentOS是一种基于Red Hat Enterprise Linux(RHEL)源代码构建的免费发行版。 - CentOS提供了稳定、可靠且安全的操作系统环境,适用于服务器和企业级应用。 - CentOS与RHEL在软件包和功能方面基本保持一致,但不包含商业支持。 - CentOS使用yum作为软件包管理工具,可以方便地安装、更新和卸载软件包。 3. 常用命令和配置: - 在Linux和CentOS中,常用的命令有ls(列出文件和目录)、cd(切换目录)、mkdir(创建目录)、rm(删除文件或目录)等。 - 配置文件通常存放在/etc目录下,例如/etc/network/interfaces用于配置网络接口。 - Linux和CentOS支持使用vi或nano等文本编辑器来编辑配置文件。 - 通过使用sudo命令,可以以超级用户权限执行特权操作。 这些是关于Linux和CentOS的一些基本笔记。如果你有更具体的问题,我可以为你提供更详细的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值