有的时候处于安全以及便利的考虑我们希望以非root执行docker的命令,下面是方法:
1.将希望不需要sudo 执行docker命令的用户添加到docker组
例如:将用户名jmh添加到docker组内
sudo gpasswd jmh docker
2.修改sock权限
sudo chmod a+rw /var/run/docker.sock
有的时候处于安全以及便利的考虑我们希望以非root执行docker的命令,下面是方法:
1.将希望不需要sudo 执行docker命令的用户添加到docker组
例如:将用户名jmh添加到docker组内
sudo gpasswd jmh docker
2.修改sock权限
sudo chmod a+rw /var/run/docker.sock
web应用中常常会有定时处理某项任务的需求,flask框架比较灵活,简单的需求中可以低耦合的使用APScheduler,复杂的需求也很容易集成进celery。但是在django中,定制起来就比较麻烦,django现有较为成熟的定时任务组建django-crontab和django-celery。前者基于crontab,后者基于celery。
先说说较为简单的crontab。
pip install django-crontab
setting.py
INSTALLED_APPS = [
...
'django_crontab',
]
CRONJOBS = [
('* * * * *', 'django.core.management.call_command',
['task'], {}, ">> task.log"),
] # 与crontab定时器规则一样, []中写入任务名称,{}中可传入参数
这里使用了自定义的manage指令,本片中不做深入说明。也可以替换为要运行的py代码,写清楚详细路径即可。
现在就可以将任务添加进系统的crontab中了
python manage.py crontab add
收到下面的提示就算提交成功了,也可以通过 crontab -l查看当前有效的定时任务
bash -cl "/bin/python /home/hsm/Dropbox/Python2/project/manage.py crontab add /home/hsm/Dropbox/Python2/project"
adding cronjob: (5137385ee17caca44bc53c1bef979825) -> ('* * * * *', 'django.core.management.call_command', ['task'], {}, '>> task.log')
要删除crontab,可执行
python manage.py crontab remove
测试环境需要一个脚本,定时让mysql写入一个数据,需要crontab 按秒执行
写的shell脚本
[root@kvm-ovirt shell]# cat mysql.sh
#!/bin/sh
############
#by xuebao 百宝盆未登陆数据
mysql <
在crontab 中写定时任务
提示:因为这个10秒执行还有缺陷,60秒 和10 秒钟执行 有20秒的空缺,此方法不适合特别精确的crontab 按秒执行
,需要多少秒在 sleep 后面写几。
例子:我的是每10秒执行一次。
[root@kvm-ovirt shell]# crontab -l
* * * * * sleep 10; /bin/sh /home/shell/mysql.sh
* * * * * sleep 20; /bin/sh /home/shell/mysql.sh
* * * * * sleep 30; /bin/sh /home/shell/mysql.sh
* * * * * sleep 40; /bin/sh /home/shell/mysql.sh
* * * * * sleep 50; /bin/sh /home/shell/mysql.sh
就像再windows上有计划任务一样,centos7 自然也有计划任务,而且设置更为灵活,好用。再centos7 上可以利用crontab 来执行计划任务, 依赖与 crond 的系统服务,这个服务是系统自带的,可以直接查看状态,启动,停止。
注:第一次使用crond 网上有人说需要安装crond服务!可以通过命令 rpm -qa|grep cron 查看是否安装了该服务!
1. 查看cron的状态,设为开机启动
$ systemctl status crond (查看状态)
$ systemctl enable crond (设为开机启动)
$ systemctl start crond (启动crond服务)
2。编辑crontab 的配置文件,设置定时任务。
$ crontab -u 用户名 -e (编辑用户的定时任务,指定的执行的用户,默认为当前执行命令的用户)
--------------------------------------------------------------------------------------------
# crontab基本格式
# +---------------- minute 分钟(0 - 59)
# | +------------- hour 小时(0 - 23)
# | | +---------- day 日期(1 - 31)
# | | | +------- month 月份(1 - 12)
# | | | | +---- week 星期(0 - 7) (星期天=0 or 7)
# | | | | |
# * * * * * 要运行的命令
*/30 * * * * /usr/local/mycommand (每天,每30分钟执行一次 mycommand命令)
-----------------------------------------------------------------------------------------------------------
$ crontab -u 用户名 -l (列出用户的定时任务列表)
3. 保存退出后,即可生效,默认crontab会每分钟检查一次任务文件的。
除了这样编辑外,还可以直接写到crond的主配置文件内,默认执行者为root。
$ vim /etc/crontab (直接在最下面添加你的任务命令即可)
PS:特别注意,crond的任务计划, 有并不会调用用户设置的环境变量,它有自己的环境变量,当你用到一些命令时,比如mysqldump等需要环境变量的命令,手工执行脚本时是正常的,但用crond执行的时候就会不行,这时你要么写完整的绝对路径,要么将环境变量添加到 /etc/crontab 中。
好了,计划任务就是这么简单了,但是计划任务,执行的语句如果是多条,则需要用药shell脚本,自己先写一个shell脚本,然后在计划任务中,执行这个脚本即可。至于shell脚本的写法, 这里不赘述,后面再补充。
1、 crontab命令概念
crontab命令用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。
cron 系统调度进程。 可以使用它在每天的非高峰负荷时间段运行作业,或在一周或一月中的不同时段运行。cron是系统主要的调度进程,可以在无需人工干预的情况下运行作业。
crontab命令允许用户提交、编辑或删除相应的作业。每一个用户都可以有一个crontab文件来保存调度信息。系统管理员可以通过cron.deny 和 cron.allow 这两个文件来禁止或允许
用户拥有自己的crontab文件。
2、检查是否安装了crontab,如果提示未安装请自行安装,crontab安装包在系统光盘里面的pacekage文件夹,也可以进入此网站找 http://rpmfind.net/ 相对应的crontab安装包。
3、 crontab服务启动与关闭。
4、 全局配置文件:
crontab在/etc目录下面存在cron.hourly,cron.daily,cron.weekly,cron.monthly,cron.d五个目录和crontab,cron.deny二个文件。
cron.daily是每天执行一次的job
cron.weekly是每个星期执行一次的job
cron.monthly是每月执行一次的job
cron.hourly是每个小时执行一次的job
cron.d是系统自动定期需要做的任务
crontab是设定定时任务执行文件
cron.deny文件就是用于控制不让哪些用户使用Crontab的功能
5、 用户配置文件:
每个用户都有自己的cron配置文件,通过crontab -e 就可以编辑,一般情况下我们编辑好用户的cron配置文件保存退出后,系统会自动就存放于/var/spool/cron/目录中,文件以用户名命名.linux的cron服务是每隔一分钟去读取一次/var/spool/cron,/etc/crontab,/etc/cron.d下面所有的内容.
6、 crontab文件格式:
* * * * * command
minute hour day month week command
分 时 天 月 星期 命令
minute: 表示分钟,可以是从0到59之间的任何整数。
hour:表示小时,可以是从0到23之间的任何整数。
day:表示日期,可以是从1到31之间的任何整数。
month:表示月份,可以是从1到12之间的任何整数。
week:表示星期几,可以是从0到7之间的任何整数,这里的0或7代表星期日。
command:要执行的命令,可以是系统命令,也可以是自己编写的脚本文件。
7、 特殊字符:
星号(*):代表所有可能的值,例如month字段如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。
逗号(,):可以用逗号隔开的值指定一个列表范围,例如,“1,2,5,7,8,9”。
中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”。
正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如*/10,如果用在minute字段,表示每十分钟执行一次。
8、在home目录下编写一个test.sh脚本,脚本功能是把/home下ifcfg-eth0这个文本复制到/mnt目录下。
9、运行crontab –e 编写一条定时任务 */5 * * * * /home/test.sh 在每5分钟执行一次test.sh脚本。
10、查询当前用户定时任务或删除当前用户定时任务。
11、设置crond开机自动启动。
12、实例:
CentOS 7
通过pip直接安装
pip install virtualenv
# 在/usr/local/下面创建一个virtualenv目录,作为多环境管理用目录
mkdir /usr/local/virtualenv
# 进入上面创建的目录
cd /usr/local/virtualenv
# 创建一个名为env1的python环境(这里没加参数,该命令其实有很多参数可用)
virtualenv env1
# 执行之后,目录下会创建一个env1目录,如果想切换到env1环境下,则执行一下命令
source env1/bin/activate
为了更简便的切换和管理virtualenv环境,可以借助virtualenvwrapper扩展包
安装扩展包
pip install virtualenvwrapper
配置环境变量,可在/etc/profile里添加如下指令
# 指定工作空间,可以自己随意创建
WORKON_HOME=/usr/local/virtualenv
# /usr/bin/virtualenvwrapper.sh是安装扩展包后生成的,不同的系统可能生成的文件路径不同
source /usr/bin/virtualenvwrapper.sh
常用命令
# 创建环境
mkvirtualenv [环境名]
# 切换到环境;后面不跟环境名,可以显示出所有环境
workon [环境名]
# 查看已有的环境
lsvirtualenv
# 查看当前环境中已安装的包
lssitepackages
# 退出当前环境
deactivate