linux crontab -e报错 || 不执行 || expected unqualified-id before

来源:互联网 发布:淘宝首页导航栏尺寸 编辑:程序博客网 时间:2024/05/29 09:39

0, 前言:

1,linux 新安装的centOS 或小红包系统,第一次执行crontab -e命令报错 Error detected while processing /root/.vim/bundles.vim:
2,Linux下定时任务(秒级别)的实现 --- crontab仅仅可以分钟级别,自定义脚本while true + sleep
3,C++ * a和*&a作为函数的参数时有什么区别?  *& 表明是指针应用,跟引用一样的作用

4,TDBPro.cpp:3: 错误:expected unqualified-id before ‘using’   ---- class A的定义必须加分号 class A {……}

5,crontab定时任务不执行的原因


1,问题 第一运行crontab –e报错 OR 新机器crontab –e 报错

[@tc_55_144 HotRankingLoggers]# crontab -e

Error detected while processing /root/.vim/bundles.vim:

line   9:

E492: Not an editor command: Bundle 'gmarik/vundle'

line  14:

E492: Not an editor command: Bundle 'Shougo/neocomplcache'

line  15:

E492: Not an editor command: Bundle'mattn/emmet-vim'

line  16:

……

错误的第一行已经提示vim 问题


解决方案:修改默认编辑器 vim ~/.bashrc

[root@~]# vim ~/.bashrc

export EDITOR=/usr/bin/vim

[root@~]# source ~/.bashrc

此时即可使用crontab -e来编辑定时任务执行日志

注:通过 /var/log/cron可以查询定时任务执行日志


2, Linux下定时任务(秒级别)的实现

方法一:巧用crontab命令

linux下crontab命令可以执行定时任务,但最小粒度为1min,可对其合理运用,以实现秒级别的粒度。

以下代码是实现周期为20s的定时任务,两种方式均可,但稍有不同。

·        修改用户的日常任务:crontab-e

·         * * * * * python test.py
·         * * * * * sleep 20; python test.py 
·         * * * * * sleep 40; python test.py 

·        修改系统的定时任务:vim/etc/crontab

·         * * * * * root python test.py
·         * * * * * root sleep 20 && python test.py
·         * * * * * root sleep 40 && python test.py

方法二:自定义定时执行的脚本

写个后台运行的脚本一直循环运行,然后每次循环sleep 20s。

while true ;do

command

sleep 20 //间隔秒数

done

概述:
crontab
的格式是到分的级别
格式如下:
* * * * * command



方法1###个人觉得这个是比较完美的
[test@B02 tmp]$ crontab -l ###
每到20秒执行一次,要写3个,20秒一次,40秒一次,1分钟一次。三个综合下来就是每20秒执行一次
* * * * * sleep 20&&bash/home/test/mosql.sh 

* * * * * sleep 40&&bash/home/test/mosql.sh 
* * * * * bash /home/test/mosql.sh

方法2####这个方法个人觉得有个弊端,就是万一脚本进程挂了,就废了。但如果再用crontab* * * * *这个格式去执行,有点违背初衷,而且有点多此一举。
while true do

command
sleep 20 ###睡眠20秒执行一次
done


综上所述,个人比较推荐“方法1

注意,做秒级自动执行时,个人觉得需要考虑脚本本身的实行时间。


2、crontab定时任务不执行的原因
若是做完了crontab -e添加完任务,并且任务也存在,但是却没有按照任务指定时间执行,则检查
  1)查看日志  --- 默认情况下,crontab中执行的日志写在/var/log下
2)查看crontab 是否启动成功,检测crontab 服务是否启动,
       /etc/init.d/crond status 
     没启动则要用下面命令
         /etc/init.d/crond start
3)若不是上面原因,则重启下crond服务,命令为
      使用 /etc/init.d/crond restart
      或者service crond restart(Centos7下为systemctl restart crond)
3)查看命令中操作的文件是否存在,当前用户是否有操作该文件的权限,定时任务的执行人

3. Linux中设置服务自启动的三种方式 (ret系列)


c语言 出现错误 expected unqualified-id before

你自定义函数delete可能和库函数同名了,把函数名再加几个字符。

 

今天写了一个occiC++程序,结果一编译就出了个莫名其妙的错误。信息如下:

g++ -cTDBPro.cpp -I/u01/oracle/rdbms/public -I./
TDBPro.cpp:3:
错误:expected unqualified-id before ‘using’

 

 TDBPro.cpp的第一行代码为头文件包含,第二行为空行,第三行就为using命名空间 std

#include"TDBPro.h"

 

using namespacestd;

 

 

一开始以为是从windows上传到Linuxftp的问题,直接到linux上用vi看源文件没发现问题。搞来搞去,最后发现是包含的头文件中定义类的时候没有加分号:

 

Class xxxx

{

...

};  //就是这个分号

C++的类为什么要加分号

1. #ifndef _TEST_H_  

2. #define _TEST_H_  

3. class Test  

4. {  

5.     public//定义成内联的有两种方式  

6.         int add(int a,int b)//假设我们要将该函数定义为内联的,声明的时候可以不给出inline关键字,可以在实现的时候给出inline关键字  

7.         {                   //第一种内联函数的方式在类外给出实现代码,并加关键字inline,这一种是在类里给出实现,不用加inline关键字  

8.             return a+b;    //即使我们没有加inline关键字,它也是内联的  

9.         }  

10.    private:  

11.        int x_;  

12.        int y_;  

13.        int z_;  

14.};  //最后的分号不能丢  

15.#endif //_TEST_H_  

16.简单的说,就是规定。类在定义和声明时,结尾必须加分号是C++的强制规定,如果丢失就会编译报错。

在C++中,除函数,及预编译指令外,其它的语句或代码段结尾都必须要加分号。
其中预编译指令是指,以#开头的语句。常见的有,#include,#define, #ifdef, #if, #elif, #else,#endif等。

C++* a和*&a作为函数的参数时有什么区别?

如果你说的是函数的形参,那么
void foo(int* ptr);
是传值调用,比如你这么调用
int a;
int* pValue = &a;
foo(pValue);
这样的情况下,pValue的值是不能被函数foo改变的,也就是pValue肯定是指向a.
但是如果你这么声明
void foo(int*& ptr);
则是传递引用,那么如果你函数里面
void foo(int*& ptr)
{
ptr = NULL;
}
这样调用过之后,pValue就变成了NULL.而第一种情况pValue是不能被改变的.
引用是C++带来的很重要一个特性,他在很多情况下避免了使用指针.而且,C++里面,引用是不可以捏造的,比如C你可以很容易弄一个NULL的指针,而引用这不存在NULL引用.
上面的foo函数如果要用C来实现,则必须用指针的指针:
void foo(int** pptr)
{
*ptr = NULL;
}
调用的时候要foo(&pValue)
这种技术很多用在比如定义一个安全删除指针的函数,所谓安全就是,只有当指针为零的时候才执行删除,删除之后,立刻把指针赋值为NULL.
template
inline safe_delete(T*& ptr)
{
if (ptr)
{
delete ptr;
ptr = NULL;
}
}
C++里面,能不用指针都应该尽量避免,STL里面就大量使用引用.

 

1//this指针问题  2012年7月18日0:37:13

 2 #include <iostream>

 3 usingnamespace std;

 4

 5 

 6  classpoint

 7  {

 8  public:

 9     

10      int x,y;

11

12      point(int a,intb)

13      {

14         x= a;

15         y = b;

16      }

17

18      void input(int x,inty )

19      {

20      

21         

22         x= x;

23         y =y;

24      }

25       

26

27      void output()

28      {

29          cout<<x<<y;

30

31      }

32  };

33

34  int main()

35  {

36

37

38      point a(5,5);

39

40       a.input(10,10);

41       a.output();

42      return 0;

43 

44  }

原创粉丝点击