分类 - Linux

2017-09-13 21:34:13    67    0    0

关于定时任务的配置其实是一个老掉牙的问题了,为什么我又要总结一遍呢?我想大概有以下几点原因。首先,大多数文章都聚焦于cron语法,而比较忽视具体的操作步骤。其次,很多文章都介绍的比较凌乱,层次不是很清楚。而且,当我理清楚linux下定时任务配置的一套流程之后,深刻的觉得他的设计真的是很周到的。不过最重要的一点大概就是我非常不喜欢那种堆砌命令用法的文章,好像Linux就是他写的一样,东一块说明,西一块说明,谁都不知道这些说明是谁说的,从哪里来的,是不是以讹传讹,可信度有多少,是不是已经不被支持,等等。尤其是在当前这种版本飞速迭代的年代,对于一些重要配置只知其然不知其所以然是非常可怕的一件事。
其实关于定时任务配置这一块没有任何技术含量,重要的就是细心一点,理清配置文件之间的关系即可。

概述

在linux里配置定时任务主要是靠cron和crontab两个程序来控制。这两个命令各司其职而又互相联系,cron是执行定时任务的守护进程,负责配置的解析跟处理;而crontab则是方便用户进行直接配置的命令,相当于是方便用户直接进行管理的工具。

Cron

查阅Ubuntu14.04系统的cron的man文档,我们可以发现,cron其实是一个存放在/etc/init.d/下的一个脚本,随着系统开机自动启动,可以由service命令调度控制开启和关闭。

Step1

首先,cron会搜索/var/spool/cron/crontabs文件夹,这个文件夹下有多个以用户名命名的文件,每个文件就是属于各个用户的独立的cron配置文件。我们可以将定时任务项按照类似下面的规则配置在这些文件里:

1234567
# For example, you can run a backup of all your user accounts# at 5 a.m every week with:# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/# # For more information see the manual pages of crontab(5) and cron(8)# # m h  dom mon dow   command

 

其实就是基础的cron配置项加上需要执行的命令。需要注意的是与下面两个不同,这里的配置不需要指定用户名,而下面的配置是需要指定用户名的。

2017-04-06 09:55:38    228    0    0

一、互斥锁(mutex)

通过锁机制实现线程间的同步。

初始化锁。在Linux下,线程的互斥量数据类型是pthread_mutex_t。在使用前,要对它进行初始化。
静态分配:pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
动态分配:int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex_attr_t *mutexattr);
加锁。对共享资源的访问,要对互斥量进行加锁,如果互斥量已经上了锁,调用线程会阻塞,直到互斥量被解锁。
int pthread_mutex_lock(pthread_mutex *mutex);
int pthread_mutex_trylock(pthread_mutex_t *mutex);
解锁。在完成了对共享资源的访问后,要对互斥量进行解锁。
int pthread_mutex_unlock(pthread_mutex_t *mutex);
销毁锁。锁在是使用完成后,需要进行销毁以释放资源。
int pthread_mutex_destroy(pthread_mutex *mutex);

    #include <cstdio>
    #include <cstdlib>
    #include <unistd.h>
    #include <pthread.h>
    #include "iostream"
    using namespace std;
    pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER;
    int tmp;
    void* thread(void *arg)
    {
        cout << "thread id is " << pthread_self() << endl;
        pthread_mutex_lock(&mutex);
        tmp = 12;
        cout << "Now a is " << tmp << endl;
        pthread_mutex_unlock(&mutex);
        return NULL;
    }
    int main(
2016-08-02 13:43:16    146    0    0

第一步:下载最新的python的安装包,这里以2.7.2为例。

wget http://python.org/ftp/python/2.7.2/Python-2.7.2.tgz

 

第二部:解压该包到当前的目录。

tar zxvf Python-2.7.2.tgz cd Python-2.7.2

第三部:配置生成Makefile文件

 

./configure --with-threads --enable-shared

第四步:编译

 

make

第五步:安装

make install

第六步:备份上一版本的可执行程序

mv /usr/bin/python /usr/bin/python_bak

第七步:重新连接可执行程序到新安装的路径

ln -s /usr/local/bin/python /usr/bin/python

第八步:写入配置文件

 

echo "/usr/local/lib" >>/etc/ld.so.conf

第九步:重新加载配置文件

 

ldconfig python