linux 部署python 系统服务管理命令 yum源设置 linux定时任务 python在linux的虚拟环境安装以及使用

安装python3 三种方式

==linux下很多脚本默认都用python2, 所以不要把python3的执行文件改为python,因为linux里默认python就是运行python2版本 ==

  1. yum安装,最省心
    凡是yum安装的软件,可以用rpm -qi 软件名查询到信息.
    凡是yum安装的软件,都是用systemctl start/stop 启动或者停止程序

  2. rpm包安装,需要手动解决依赖关系,不好用

  3. 源代码编译安装(公司大多用这种),自定义软件版本,以及扩展功能

  • 下载python源码包 wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
  • 对tgz进行解压 用tar命令 tar -xf Python-3.6.2.tgz
  • 在python安装前的安装他的依赖包 很重要
    yum install gcc gcc-c++ patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
  • 释放makefile,释放编译文件,cd到解压文件目录 ./configure --prefix=/opt/python362 告诉编译器,python安装的目录在哪里,--prefix就是指定安装路径的
  • 执行make执行进行编译,编译完成后进行安装,两个动作可以一起写 make && make install
  • 配置python36的环境变量
echo $PATH,可以查看环境变量,`/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin`
配置环境变量就需要对PATH这个变量重新赋值
临时赋值 `PATH=/opt/python362/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin`
永久赋值 编辑/etc/profile文件,底部写入`PATH=/opt/python362/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin`
然后source /etc/profile进行重载, source命令通常用于重新执行刚修改的初始化文件,使之立即生效,而不必注销并重新登录

针对上面的所有步骤,写了个脚本,可以用source去加载自动执行

cd /home &&
yum install gcc patch libffi-devel python-devel zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel wget make tree vim -y  #安装gcc以及依赖文件
wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz &&          #下tar包
tar -xf Python-3.6.2.tgz &&                #解压缩
cd /home/Python-3.6.2 &&                  #这一步很重要configure命令必须先进入这个解压的文件目录
./configure --prefix=/opt/python362 &&   #释放make文件,并安装到指定目录 /opt/python362
make && make install &&                   #编译
echo "PATH=/opt/python362/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" >> /etc/profile &&  #写入环境变量
source /etc/profile   #重新加载全局环境变量

python在linux的虚拟环境安装以及使用

我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。
这里,virtualenv和virtualenvwrapper 可以在系统中建立多个不同并且相互不干扰的虚拟环境。
这里着重讲下这2个软件的安装和使用

  1. virtualenv
  • Linux下安装、配置virtualenv mac环境可以直接从第4步操作

    1. 先安装python,步骤略
    2. 安装virtualenv包
    1. 安装virtualenv
    pip3 install virtualenv 
    2. 创建目录
    mkdir Myproject
    cd Myproject
    3. 创建独立运行环境-命名
    virtualenv --no-site-packages --python=python3  venv#得到独立第三方包的环境,并且指定解释器是python3  venv是会把虚拟环境创建在/Myproject/venv文件夹内
    注意 新版本默认带--no-site-packages参数,可以省略,
    4. 进入虚拟环境 每换一个虚拟环境 都要重新source 一下
    source venv/bin/activate  #此时进入虚拟环境(venv)Myproject
    venv\Scripts\activate  # windows环境下使用
    5. 退出虚拟环境 用deactivate退出
    
  • 确保开发环境的一致性

    1.通过命令保证环境的一致性,导出当前python环境的包
    pip3 freeze > requirements.txt
    这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。
    可以使用 “pip list”在不产生requirements文件的情况下, 查看已安装包的列表。
    2.上传至服务器后,在服务器下创建virtualenv,在venv中导入项目所需的模块依赖
    pip3 install -r requirements.txt
    
  1. virtualenvwrapper
    virtualenv 的一个最大的缺点就是:
    每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。
    并且还有可能你忘记了虚拟环境放在哪。。。
  • 安装virtualenvwrapper包 pip3 install virtualenvwrapper 如果安装失败 则安装下他的依赖包 pip install pbr
  • 设置Linux的环境变量,每次启动就加载virtualenvwrapper
     把下面两行代码添加到 ~/.bash_profile文件中 也可以在~./bashrc文件中
     .bash_profile只在会话开始时被读取一次,而.bashrc则每次打开新的终端时,都会被读取。
     ~/.bash_profile 是交互式、login 方式进入 bash 运行的~/.bashrc 是交互式 non-login 方式进入 bash 运行的通常二者设置大致相同,
     所以通常前者会调用后者。所以一般优先把变量设置在.bashrc里面。
     比如在crontab里面执行一个命令,.bashrc设置的环境变量会生效,而.bash_profile不会
     
     打开文件
     vim ~/.bash_profile
     写入以下两行代码
     export WORKON_HOME=~/Envs   #设置virtualenv的统一管理目录
     export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的参数,生成干净隔绝的环境
     export VIRTUALENVWRAPPER_PYTHON=/opt/python347/bin/python3     #指定python解释器
     source /opt/python34/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
     读取文件,使得生效,此时已经可以使用virtalenvwrapper
     source ~/.bashrc
    
  • virtualenvwrapper基本使用
    创建一个虚拟环境:
    $ mkvirtualenv my_django115
    这会在 ~/Envs 中创建 my_django115 文件夹。
    
    在虚拟环境上工作:激活虚拟环境my_django115
    $ workon my_django115
    再创建一个新的虚拟环境
    $ mkvirtualenv my_django2
    virtualenvwrapper 提供环境名字的tab补全功能。
    当有很多环境, 并且很难记住它们的名字时,这就显得很有用。
    workon还可以任意停止你当前的环境,可以在多个虚拟环境中来回切换
    workon django1.15
    workon django2.0
    也可以手动停止虚拟环境
    deactivate
    删除虚拟环境,需要先退出虚拟环境
    rmvirtualenv my_django115
    
    常用其他命令:
    lsvirtualenv
    列举所有的环境。
    cdvirtualenv
    导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages 。
    cdsitepackages
    和上面的类似,但是是直接进入到 site-packages 目录中。
    lssitepackages
    显示 site-packages 目录中的内容。
    
    

linux定时任务

crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,对应的服务是crond
存放定时任务的文件/var/spool/cron
需要安装crontabsyum install -y crontabs

crontab (选项)(参数)
-e:编辑当前用户的计时器设置;
-l:列出当前用户的计时器设置;
-r:删除当前用户的计时器设置;
-u<用户名称>:管理其他用户的计划任务。


注意点:
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

crontab配置文件
在/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 分 时  日 月  周

crontab任务配置基本格式:*  *  *  *  *  command分钟(0-59) 小时(0-23) 日期(1-31) 月份(1-12) 星期(0-6,0代表星期天)  命令

第1列表示分钟1~59 每分钟用*或者 */1表示第2列表示小时1~23(0表示0点)第3列表示日期1~31第4列表示月份1~12第5列标识号星期0~6(0表示星期天)第6列要运行的命令

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

30 08 * * *  每天8.30去上班  

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

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

正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
*/3 * * * * /usr/sbin/ntpdate ntp1.aliyun.com  每隔三分钟执行下时间同步
注意: 3 * * * * 表示的是每小时的第三分钟执行,如果需要每3分钟执行就需要步长

例子:
所有命令一定要用绝对路径来写!
每天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重启nginx30 21 * * * /opt/nginx/sbin/nginx -s reload
#每月的1,10,22日的4:45重启nginx45 4 1,1,10,22 * * /opt/nginx/sbin/nginx -s reload
#每个星期一的上午8点到11点的第3和15分钟执行命令3,15 8-11 * * 1 command

crontab配置文件 2者不同的概念
系统的cron配置文件在 /etc/crontab
用户cront配置 在 var/spool/cron/USERNAME

crontab最小的时间单位为分钟,如果要秒级实现,需要借助其他机制, 比如利用脚本内在一分钟内实现运行多次
crontab -r 移除所有任务,也就是删除/var/spool/cron/USERNAME的文件夹
crontab执行命令时候,默认路径都是home目录下的,如果要改变执行目录,
方案一:(不同任务冲突的风险很高,所以定时任务的路径最好都用绝对路径)
更改HOME为目标脚本所在路径即可。同时要避免不同任务之间的冲突。

查看HOME,没有就新增

vi /etc/crontab

添加HOME路径

HOME=/root/target
方案二 (推荐用这种)
00 17 * * * cd /root/target; command~

rpm

RPM 机制则为解决这些问题而设计的。RPM 有点像 Windows 系统中的控制面板,会建 立统一的数据库文件,详细记录软件信息并能够自动分析依赖关系。
RPM 了解即可,因为需要手动处理包的依赖关系.
详情参考博客https://www.cnblogs.com/pyyu/articles/9355477.html

RPM的常用命令

安装软件的命令格式                rpm -ivh filename.rpm     # i表示安装   v显示详细过程  h以进度条显示
升级软件的命令格式                rpm -Uvh filename.rpm
卸载软件的命令格式                rpm -e filename.rpm
查询软件描述信息的命令格式         rpm -qpi filename.rpm
列出软件文件信息的命令格式         rpm -qpl filename.rpm
查询文件属于哪个 RPM 的命令格式   rpm -qf filename

yum源设置

更详细的看https://i.cnblogs.com/posts/edit-done;postId=16185580;isPublished=false

  • 什么是yum源?
    Yum(全称为 Yellow dog Updater, Modified)是一个在Fedora和RedHat以及CentOS中的Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包,无须繁琐地一次次下载、安装。
    说到yum源就必须说到linux系统中特有的依赖关系问题,yum就是为了解决依赖关系而存在的。yum源就相当是一个目录项,当我们使用yum机制安装软件时,若需要安装依赖软件,则yum机制就会根据在yum源中定义好的路径查找依赖软件,并将依赖软件安装好。
    YUM是“Yellow dog Updater, Modified”的缩写,是一个软件包管理器,YUM从指定的地方(相关网站的rpm包地址或本地的rpm路径)自动下载RPM包并且安装,能够很好的解决依赖关系问题。
    YUM的基本工作机制如下:
    服务器端:在服务器上面存放了所有的RPM软件包,然后以相关的功能去分析每个RPM文件的依赖性关系,将这些数据记录成文件存放在服务器的某特定目录内。
    客户端:如果需要安装某个软件时,先下载服务器上面记录的依赖性关系文件(可通过WWW或FTP方式),通过对服务器端下载的纪录数据进行分析,然后取得所有相关的软件,一次全部下载下来进行安装。

  • yum的参数

    yum(选项)(参数)
    -h:显示帮助信息;
    -y:对所有的提问都回答“yes”;
    -c:指定配置文件;
    -q:安静模式;
    -v:详细模式;
    -d:设置调试等级(0-10);
    -e:设置错误等级(0-10);
    -R:设置yum处理一个命令的最大等待时间;
    -C:完全从缓存中运行,而不去下载或者更新任何头文件。
    
  • yum源的目录

    #进入yum源目录
    cd /etc/yum.repos.d/
    #查看yum源文件
    ls -l
    
  • 配置阿里云yum源

    1.先备份系统默认的yum源,目录在`/etc/yum.repos.d`
    mkdir repo_bak
    mv *.repo repo_bak/
    2.打开阿里镜像网址 `https://developer.aliyun.com/mirror/`
    3.下载centos和epel的yum源文件,注意根据系统版本号选择,这里以centos7为例
    wget -o参数是指定下载到具体路径并保存具体文件名
    

    wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

    4. 清空yum缓存 建立新的缓存 安装epel-release源
    yum的其他命令
    yum clean all
    yum makecache
    yum install -y epel-release
    
    
    yum repolist all        列出所有仓库
    yum list all            列出仓库所有软件包
    yum info 软件包名            查看软件包信息
    yum install 软件包名        安装软件包
    yum reinstall 软件包名    重新安装软件包
    yum update    软件包名        升级软件包
    yum remove    软件包名        移除软件包
    yum clean all            清楚所有仓库缓存
    yum check-update        检查可以更新的软件包
    yum grouplist            查看系统中已安装的软件包
    yum groupinstall 软件包组    安装软件包组
    ```
    
    
  • wget对复制源的根路径下的目录
    如果对一个源地址 有如下几个源需要配置
    http://ip1/1002a/x86_64/..
    http://ip1/1002a/aarch_64/..
    .
    .
    .
    此时如果需要多1002a这个根目录下的源全量下载,并且目录文件也保持一致
    用wget命令比较省力,可以保证1002a下的目录结构和上级源是一模一样
    wget -m -np -nH --cut-dirs=1 -R "index.html*" http://ip/1002a/
    这些参数的意义如下:

-m(或 --mirror):开启镜像下载模式,等价于 -r -N -l inf --no-remove-listing 的缩写,意味着递归下载、时间戳检查、无限深度遍历,且不清除FTP站点的列表。
-np(或 --no-parent):不遍历到父目录,防止爬升到父目录进行下载。
-nH(或 --no-host-directories):取消生成基于网站主机名的目录,即不在本地创建顶级域名目录。
--cut-dirs=1:跳过URL的目录层数。值为1时,http://ip/1002a/ 里的 1002a 计为一个层级被跳过,实际下载的内容直接保存在当前目录。你可能需要根据具体的URL调整这个值。
-R "index.html*":排除下载所有名为 index.html* 的文件。这是因为wget默认会下载每个目录下的索引文件,使用此选项可以排除它们。引号内可以根据需要排除更多文件或模式。
请注意,--cut-dirs 参数的值可能需要根据实际的URL路径深度调整。在此示例中,由于我们想要把 http://ip/1002a/ 下的内容下载到当前目录,并保持其下的结构,所以设置 --cut-dirs=1 来忽略掉第一个目录层级(即 1002a)。如目录结构更深,相应地调整这个参数值。

系统服务管理命令

只有通过yum安装的软件才能用系统服务管理命令
如果大家之前学习或者使用过RHEL6系统,应该已经习惯了service、chkconfig等命令来管理系统服务,
但是在RHEL7系统中改变了systemctl来管理系统服务。
6和7的命令对比

设置开机启动相关

/etc目录的基础知识

这个目录用来存放所有的系统管理所需要的配置文件和子目录。

#网卡配置文件
/etc/sysconfig/network-script/ifcfg-eth0
#修改机器名以及网卡,网管等配置
/etc/sysconfig/network
#linux的dns客户端配置文件,实现域名和ip的互相解析
/etc/resolv.conf
#本地dns解析文件,设定ip和域名的对应解析,开发测试最常用的临时域名解析
/etc/hosts/
#系统全局环境变量永久生效的配置文件,如PATH等
/etc/profile
#用户的环境变量
~/.bash_profile 
~/.bashrc
#存放可执行程序的目录,大多是系统管理命令
/usr/sbin
#存放用户自编译安装软件的目录  > 等同于C:\Program files (windows)
/usr/local
#关于处理器的信息,还可以top指令查看
/proc/cpuinfo
#查看内存信息,还可以free -m
/proc/meminfo 
posted @ 2022-01-29 13:47  零哭谷  阅读(190)  评论(0编辑  收藏  举报