Linux下计划任务以及crontab权限问题
在Linux工作环境下,我们有时可能会需要在未来某个时间执行某个命令或脚本,但是我们又不可能定个闹钟,然后到点了再去执行吧,这多麻烦。还好我们的Linux系统这么强大,提供了任务计划这个功能,我们就不需要守着点去执行相应的命令或脚本了。当我们定义好了任务计划之后,就可以去做别的事情了,等到了我们自己定义的那个时间点,你所定义的任务操作系统会自动执行,这就被称之为任务计划。下面我们来详细讲一下任务计划的相关命令及用法
一、一次性任务计划
1、at
1
2
3
4
5
6
7
8
9
10
11
12
13
|
at, batch, atq, atrm - queue, examine or delete jobs for later execution # 检查或删除任务计划 SYNOPSIS at [-V] [-q queue] [-f file ] [-mldbv] TIME at [-V] [-q queue] [-f file ] [-mldbv] -t time_arg at -c job [job...] atq [-V] [-q queue] atrm [-V] job [job...] batch [-V] [-q queue] [-f file ] [- mv ] [TIME] -q:指定新任务的队列名称 -l:显示待执行任务的列表,同atq命令 -d:删除指定的待执行任务,同atrm命令 |
(1)、相对时间表示法定义任务计划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
at now | HH:MM | midnight | noon | teatime(4pm) + #{minutes|hours|days|weeks} [root@soysauce ~] # date Sun Dec 6 12:18:36 CST 2015 [root@soysauce ~] # at now +5min # 5分钟后执行 at> ls /tmp at> cat /etc/fstab at> <EOT> # 按Ctrl+d即可提交任务计划 job 3 at 2015-12-06 12:23 [root@soysauce ~] # date Sun Dec 6 12:20:21 CST 2015 [root@soysauce ~] # at 4pm +3days # 三天后的下午4点执行 at> cat /etc/issue at> date at> <EOT> job 4 at 2015-12-09 16:00 You have new mail in /var/spool/mail/root # 执行结果将以邮件形式发送 |
(2)、绝对时间表示法定义任务计划
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
at [ HH:MM | midnight | noon | teatime(4pm)] MMDDYY | MM /DD/YY | DD.MM.YY [root@soysauce ~] # date Sun Dec 6 12:50:16 CST 2015 [root@soysauce ~] # at 12:58 12062015 # 2015年12月6日 12:58分执行 at> echo "Hello World" at> echo "Hello Python" at> <EOT> job 9 at 2015-12-06 12:58 [root@soysauce ~] # date Sun Dec 6 12:53:05 CST 2015 [root@soysauce ~] # at midnight 06.12.2015 # 2015年12月6日 00:00分执行 at> cat /etc/inittab at> echo "Hello" at> <EOT> job 11 at 2015-12-06 00:00 |
(3)、查看待执行任务列表
1
2
3
4
5
6
7
8
9
|
at -l 或 atq [root@soysauce ~] # at -l 4 2015-12-09 16:00 a root 9 2015-12-06 12:58 a root You have new mail in /var/spool/mail/root [root@soysauce ~] # atq 4 2015-12-09 16:00 a root 9 2015-12-06 12:58 a root |
(4)、取消指定的待执行任务
1
2
3
4
5
6
7
8
9
10
|
at -d AT_JOB_ID 或 atrm AT_JOB_ID [root@soysauce ~] # atq 4 2015-12-09 16:00 a root 9 2015-12-06 12:58 a root [root@soysauce ~] # at -d 4 # 删除4号作业 [root@soysauce ~] # at -l 9 2015-12-06 12:58 a root [root@soysauce ~] # atrm 9 # 删除9号作业 [root@soysauce ~] # atq |
(5)、查看指定的任务具体内容
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
[root@soysauce ~] # at now +5min at> ls / at> <EOT> job 13 at 2015-12-06 13:05 [root@soysauce ~] # at -l 12 2015-12-06 13:02 a root 13 2015-12-06 13:05 a root [root@soysauce ~] # at -c 13 #!/bin/sh # atrun uid=0 gid=0 # mail root 0 umask 22 HOSTNAME=soysauce; export HOSTNAME SHELL= /bin/bash ; export SHELL HISTSIZE=1000; export HISTSIZE SSH_CLIENT=172.16.1.100\ 49853\ 22; export SSH_CLIENT SSH_TTY= /dev/pts/0 ; export SSH_TTY USER=root; export USER MAIL= /var/spool/mail/root ; export MAIL PATH= /usr/local/sbin : /usr/local/bin : /sbin : /bin : /usr/sbin : /usr/bin : /root/bin ; export PATH INPUTRC= /etc/inputrc ; export INPUTRC PWD= /root ; export PWD LANG=en_US.UTF-8; export LANG SSH_ASKPASS= /usr/libexec/openssh/gnome-ssh-askpass ; export SSH_ASKPASS SHLVL=1; export SHLVL HOME= /root ; export HOME LOGNAME=root; export LOGNAME CVS_RSH= ssh ; export CVS_RSH SSH_CONNECTION=172.16.1.100\ 49853\ 172.16.1.110\ 22; export SSH_CONNECTION LESSOPEN=\| /usr/bin/lesspipe .sh\ %s; export LESSOPEN G_BROKEN_FILENAMES=1; export G_BROKEN_FILENAMES OLDPWD= /tmp/test/testbin ; export OLDPWD cd /root || { echo 'Execution directory inaccessible' >&2 exit 1 } ${SHELL:- /bin/sh } << `( dd if = /dev/urandom count=200 bs=1 2> /dev/null |LC_ALL=C tr -d -c '[:alnum:]' )` ls / # 此为我们指定的任务 |
2、batch
1
2
3
4
5
6
|
batch [-V] [-q queue] [-f file ] [- mv ] [TIME] # 当系统不繁忙时执行任务计划,与at用法类似 [root@soysauce ~] # batch now +3min at> echo "Hello Python" at> <EOT> job 14 at 2015-12-06 13:27 |
补充:/etc/at.deny和/etc/at.allow
①如果at.allow存在,而at.deny不存在,那么在at.allow文件中定义的用户可以使用at
②如果at.allow不存在,而at.deny存在,没有定义在deny中的用户可以使用at
③如果at.allow和at.deny都不存在,那么只有root用户可以使用at
④如果at.allow和at.deny都存在,那么只有at.allow中的用户可以使用at
二、周期性任务计划
1、crontab与anacron
crontab:crontab命令被用来提交和管理用户的需要周期性执行的任务,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond服务,crond进程每分钟会定期检查是否有要执行的任务,如果有,则自动执行该任务。依赖于crond服务
anacron:cron的补充,能够实现让cron因为各种原因在过去的时间该执行而未执行的任务在恢复正常执行一次。依赖于nancron服务
2、Crontab任务种类及格式定义
(1)、系统cron任务:/etc/crontab 分钟 小时 天 月 周 用户 任务
1
2
3
4
5
6
7
8
9
10
11
|
[root@soysauce ~] # cat /etc/crontab SHELL= /bin/bash # 执行任务所使用的解释器 PATH= /sbin : /bin : /usr/sbin : /usr/bin # 执行任务所使用的PATH环境变量 MAILTO=root # 执行任务完成后的结果通过邮件发送给谁 HOME=/ # 执行任务时使用的HOME变量作为家目录 # run-parts 01 * * * * root run-parts /etc/cron .hourly # 每小时任务,run-parts可以运行目录下所有脚本 02 4 * * * root run-parts /etc/cron .daily # 每日任务 22 4 * * 0 root run-parts /etc/cron .weekly # 每周任务 42 4 1 * * root run-parts /etc/cron .monthly # 每月任务 |
(2)、用户cron任务:/var/spool/cron/USERNAME 分钟 小时 天 月 周 任务
1
2
3
4
5
6
|
[root@soysauce cron ] # crontab -l # Update the system time * * * /1 * * /usr/sbin/ntpdate s2m. time .edu.cn &> /dev/null # Just echo "Hello Python" * /10 * * * * /bin/echo "Hello Python" # 用户cron不需要指定用户 |
(3)、补充anacron:/etc/anacrontab 检查频率 分钟 任务注释信息 运行的任务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
[root@soysauce cron ] # cat /etc/anacrontab # /etc/anacrontab: configuration file for anacron # See anacron(8) and anacrontab(5) for details. SHELL= /bin/sh # 执行任务所使用的解释器 PATH= /sbin : /bin : /usr/sbin : /usr/bin # 执行任务所使用的PATH环境变量 MAILTO=root # 执行任务完成后的结果通过邮件发送给谁 1 65 cron .daily run-parts /etc/cron .daily 7 70 cron .weekly run-parts /etc/cron .weekly 30 75 cron .monthly run-parts /etc/cron .monthly # 每天开机之后的第65分钟检查cron.daily是否执行,没有则执行 # 每隔7天开机之后的第70分钟检查cron.weekly是否执行,没有则执行 # 每隔30天开机之后的75分钟检查cron.monthly是否执行,没有则执行 |
3、时间的有效取值
1
2
3
4
5
6
7
8
9
|
分钟:0-59 小时:0-23 天:1-31 月:1-12 周:0-7,0和7都表示周日 |
4、时间通配表示
①*: 对应时间的所有有效取值
1
2
3
4
5
|
3 * * * * # 每天每小时的第三分钟执行一次 3 * * * 7 # 每周日每小时的第三分钟执行一次 13 12 6 7 * # 每年的7月6日12点13分执行一次 |
②,: 离散时间点:
1
|
10,40 02 * * 2,5 # 每周二和周五的凌晨2点10分和40分执行一次 |
③-:连续时间点:
1
|
10 02 * * 1-5 # 周一至周五的凌晨2点10分执行一次 |
④/#: 对应取值范围内每多久一次
1
2
3
4
5
6
7
8
|
* /3 * * * * # 每三分钟执行一次 注意:比所要求小的时间单位必须要给定时间点(每天执行 那么分钟 小时都要给定时间 不能用*) 如: 08 * /2 * * * # 每两小时执行一次 10 04 * /2 * * # 每两天执行一次 |
5、cron的环境变量
1
2
3
|
cron 默认PATH /bin : /sbin : /usr/bin : /usr/sbin # cron执行所有命令都去PATH环境变量指定的路径下去找 |
6、执行结果将以邮件形式发送
1
2
3
|
* /3 * * * * /bin/cat /etc/fstab > /dev/null # 错误信息仍然发送给管理员 * /3 * * * * /bin/cat /etc/fstab &> /dev/null # 所有信息都不发送给管理员,无论是否正确执行 |
7、用户任务计划管理
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
crontab - maintain crontab files for individual users (ISC Cron V4.1) # 管理用户的周期性任务计划 SYNOPSIS crontab [-u user] file crontab [-u user] [-l | -r | -e] [-i] [-s] -l: 列出当前用户的所有 cron 任务 -e: 编辑任务计划 -r: 移除所有任务 -u USERNAME: 管理其用户的 cron 任务 [root@soysauce cron ] # pwd /var/spool/cron # 所有用户的cron任务计划都会保存在此目录下与用户同名的文件当中 [root@soysauce cron ] # ls root [root@soysauce cron ] # cat root # 查看这个文件,此时为空 [root@soysauce cron ] # crontab -e # 编辑任务计划条目 crontab : installing new crontab [root@soysauce cron ] # crontab -l # 查看任务计划列表 # Update the system time * * * /1 * * /usr/sbin/ntpdate s2m. time .edu.cn &> /dev/null # Just echo "Hello Python" * /10 * * * * /bin/echo "Hello Python" [root@soysauce cron ] # cat root # 用cat命令查看是一样的 # Update the system time * * * /1 * * /usr/sbin/ntpdate s2m. time .edu.cn &> /dev/null # Just echo "Hello Python" * /10 * * * * /bin/echo "Hello Python" [root@soysauce cron ] # crontab -e crontab : installing new crontab "/tmp/crontab.XXXXzJD87o" :5: bad day-of-week errors in crontab file , can't install . Do you want to retry the same edit? y # 如果编辑之后又语法错误,就会提示是否继续编辑 [root@soysauce cron ] # crontab -r # 移除所有cron任务,并且文件也会一并删除 [root@soysauce cron ] # ls [root@soysauce cron ] # crontab -l no crontab for root [root@soysauce cron ] # crontab -u hadoop -e # 为hadoop用户添加cron任务 no crontab for hadoop - using an empty one crontab : installing new crontab [root@soysauce cron ] # crontab -u hadoop -l # Just echo "Hello Python" * /10 * * * * /bin/echo "Hello Python" [root@soysauce cron ] # su - hadoop [hadoop@soysauce ~]$ crontab -l # 可以看到hadoop用户的cron任务已然生成 # Just echo "Hello Python" * /10 * * * * /bin/echo "Hello Python" |
三、sudo详解
sudo条目(/etc/sudoers)定义格式: who which_hosts=(runas) TAG:command
谁(who)能够以哪个用户(runas)的身份通过什么主机(which host)执行什么命令(command)
1、who
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
User_List ::= User | User ',' User_List User ::= '!' * username | '!' * '#' uid | '!' * '%' group | '!' * '+' netgroup | '!' * '%:' nonunix_group | '!' * User_Alias Examples: # User alias specification User_Alias FULLTIMERS = millert, mikef, dowdy User_Alias PARTTIMERS = bostley, jwfox, crawl User_Alias WEBMASTERS = will, wendy, wim |
2、which_hosts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
Host_List ::= Host | Host ',' Host_List Host ::= '!' * hostname | '!' * ip_addr | '!' * network( /netmask )? | '!' * '+' netgroup | '!' * Host_Alias # Host alias specification Host_Alias SPARC = bigtime, eclipse, moet, anchor :\ SGI = grolsch, dandelion, black :\ ALPHA = widget, thalamus, foobar :\ HPPA = boa, nag, python Host_Alias CUNETS = 128.138.0.0 /255 .255.0.0 Host_Alias CSNETS = 128.138.243.0, 128.138.204.0 /24 , 128.138.242.0 Host_Alias SERVERS = master, mail, www, ns Host_Alias CDROM = orion, perseus, hercules |
3、runas
1
2
3
4
5
6
7
8
9
10
11
12
13
|
Runas_List ::= Runas_Member | Runas_Member ',' Runas_List Runas_Member ::= '!' * username | '!' * '#' uid | '!' * '%' group | '!' * +netgroup | '!' * Runas_Alias # Runas alias specification Runas_Alias OP = root, operator Runas_Alias DB = oracle, sybase Runas_Alias ADMINGRP = adm, oper |
4、command
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
Cmnd_List ::= Cmnd | Cmnd ',' Cmnd_List commandname ::= filename | filename args | filename '""' Cmnd ::= '!' * commandname | '!' * directory | '!' * "sudoedit" | '!' * Cmnd_Alias # Cmnd alias specification Cmnd_Alias DUMPS = /usr/bin/mt , /usr/sbin/dump , /usr/sbin/rdump ,\ /usr/sbin/restore , /usr/sbin/rrestore Cmnd_Alias KILL = /usr/bin/kill Cmnd_Alias PRINTING = /usr/sbin/lpc , /usr/bin/lprm Cmnd_Alias SHUTDOWN = /usr/sbin/shutdown Cmnd_Alias HALT = /usr/sbin/halt Cmnd_Alias REBOOT = /usr/sbin/reboot Cmnd_Alias SHELLS = /usr/bin/sh , /usr/bin/csh , /usr/bin/ksh , \ /usr/local/bin/tcsh , /usr/bin/rsh , \ /usr/local/bin/zsh Cmnd_Alias SU = /usr/bin/su Cmnd_Alias PAGERS = /usr/bin/more , /usr/bin/pg , /usr/bin/less |
5、tag
1
2
|
Tag_Spec ::= ( 'NOPASSWD:' | 'PASSWD:' | 'NOEXEC:' | 'EXEC:' | 'SETENV:' | 'NOSETENV:' ) |
6、sudo命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
sudo , sudoedit - execute a command as another user SYNOPSIS sudo -h | -K | -k | -L | -V sudo - v [-AknS] [-p prompt] -l:查看用户授权条目 -K:清除密码的有效期限,即下次再执行 sudo 时便需要输入密码 例:允许hadoop可以修改除了eth0之外的所有接口属性 [hadoop@CentOS5 ~]$ /sbin/ifconfig eth0 172.16.1.115 /16 SIOCSIFADDR: Permission denied SIOCSIFNETMASK: Permission denied SIOCSIFBROADCAST: Permission denied SIOCSIFFLAGS: Permission denied [hadoop@CentOS5 ~]$ sudo /sbin/ifconfig eth0 172.16.1.115 /16 # hadoop用户不在sudoers列表中 [ sudo ] password for hadoop: hadoop is not in the sudoers file . This incident will be reported. [hadoop@CentOS5 ~]$ exit [root@CentOS5 ~] # visudo [root@CentOS5 ~] # tail -1 /etc/sudoers # 定义能够修改eth0之外的接口 hadoop ALL=(ALL) /sbin/ifconfig , ! /sbin/ifconfig eth0 [[\:digit\:]]* [root@CentOS5 ~] # su - hadoop [hadoop@CentOS5 ~]$ sudo /sbin/ifconfig eth0 172.16.1.115 /16 # 提示不能修改eth0 [ sudo ] password for hadoop: Sorry, user hadoop is not allowed to execute '/sbin/ifconfig eth0 172.16.1.115/16' as root on CentOS [hadoop@CentOS5 ~]$ sudo /sbin/ifconfig lo 127.0.0.1 /8 # lo接口修改成功 [ sudo ] password for hadoop: [hadoop@CentOS5 ~]$ /sbin/ifconfig eth0 Link encap:Ethernet HWaddr 00:0C:29:FE:82:38 inet addr:172.16.1.110 Bcast:172.16.255.255 Mask:255.255.0.0 inet6 addr: fe80::20c:29ff:fefe:8238 /64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:35524 errors:0 dropped:0 overruns:0 frame:0 TX packets:22083 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:37848654 (36.0 MiB) TX bytes:2718196 (2.5 MiB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1 /128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:144 errors:0 dropped:0 overruns:0 frame:0 TX packets:144 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:20256 (19.7 KiB) TX bytes:20256 (19.7 KiB) 例:允许hadoop可以修改除了root用户之外的所有用户的密码 [root@CentOS5 ~] # visudo [root@CentOS5 ~] # tail -1 /etc/sudoers hadoop ALL=(ALL) /usr/bin/passwd [[\:alpha\:]]*, ! /usr/bin/passwd root [root@CentOS5 ~] # su - hadoop [hadoop@CentOS5 ~]$ sudo /usr/bin/passwd [ sudo ] password for hadoop: Sorry, user hadoop is not allowed to execute '/usr/bin/passwd' as root on CentOS5.8. [hadoop@CentOS5 ~]$ sudo /usr/bin/passwd root [ sudo ] password for hadoop: Sorry, user hadoop is not allowed to execute '/usr/bin/passwd root' as root on CentOS5.8. [hadoop@CentOS5 ~]$ sudo /usr/bin/passwd tom [ sudo ] password for hadoop: Changing password for user tom. New UNIX password: BAD PASSWORD: it is WAY too short Retype new UNIX password: passwd : all authentication tokens updated successfully. |
Linux下计划任务以及crontab权限问题的更多相关文章
- Linux下使用SSH、Crontab、Rsync三工具实现数据自动备份
Linux下使用SSH.Crontab.Rsync三工具实现数据自动备份 作为网管人员大概都无一例外的经历过系统备份,尤其是重要系统的备份.重要数据库系统的备份工作.由于备份是个频繁而琐碎的工作,如何 ...
- Linux下ls命令显示符号链接权限为777的探索
Linux下ls命令显示符号链接权限为777的探索 --深入ls.链接.文件系统与权限 一.摘要 ls是Linux和Unix下最常使用的命令之一,主要用来列举目录下的文件信息,-l参数允许查看当前目录 ...
- Linux 下指定端口开放访问权限
Linux 下指定端口开放访问权限 作者:Grey 原文地址: 博客园:Linux 下指定端口开放访问权限 CSDN:Linux 下指定端口开放访问权限 环境 CentOS 系和 Debian 系的防 ...
- Linux下计划任务:crontab 命令的权限说明
Linux下的计划任务: 使用crontab命令来执行调度,在 Linux 下可以通过创建文件 /etc/cron.allow 或者 /etc/cron.deny 来控制权限,如果 /etc/cron ...
- linux下系统定时任务配置----crontab(mysql定时备份)
crontab命令用于设置周期性被执行的指令,与windows下的计划任务类似,当安装完成操作系统后,默认会安装此服务工具,并且会自动启动crond进程,crond进程每分钟会定期检查是否有要执行的任 ...
- linux下计划任务学习记录
0x01 计划任务简介 linux 中计划任务主要分为”循环执行”和”只执行一次”两种,分别对应的时 crond 服务 和 atd 服务: 0x02 只执行一次的计划任务 0x02.1 atd 服务说 ...
- linux下定时任务的工具crontab的用法
Linux计划任务工具cron用法详解 linux下大名鼎鼎的计划任务工具crontab的使用介绍baidu.google上多得让人眼花缭乱,本着“天下文章一大抄”的觉悟,加上本人日常工作中总结的使用 ...
- Linux下报 java.net.SocketException权限不够 异常解决
转载自:http://wangchongan.com/articles/java-net-socket-exception-permission-denied.html 今天在Linux下用Jetty ...
- Linux下的文件与目录权限
一.用户(User).群组(Group)和其他人(Others) linux是多用户多任务的操作系统,同一时刻可能会有多个用户登录系统,考虑到文件的安全性等问题,所以Linux下的文件都属于一个特定的 ...
随机推荐
- phpstorm激活大全--持续更新(支持2018最新版)
方法一. 通过Licence Server 激活PHPStorm(快速) 方法原理是通过搭建服务器激活,不过网上有许多搭建好的. http://idea.goxz.gq http://v2mc.net ...
- 解决在ubuntu中安装或升级时出现“11:资源暂时不可用”错误
解决在ubuntu中安装或升级时出现“11:资源暂时不可用”错误 解决在ubuntu中安装或升级时出现“11:资源暂时不可用”错误. 下图为具体情况: 出现问题: termial下在执行sudo ap ...
- docker 实践
https://doc.yonyoucloud.com/doc/docker_practice/etcd/etcdctl.html 启动http restful API docker批量映射端口 怎么 ...
- Received empty response from Zabbix Agent at[172.16.1.51]. Assuming that agent dropped connection because of access permissions
Centos7.5 Zabbix创建主机ZBX爆红 原因:/etc/zabbix/zabbix_agentd.conf配置文件的Server写错了 解决方法: [root@db01 ~]# vim / ...
- 对象new和不new的理解
1.现象 在一个线程类[QObject]中声明一个对象QTimer,[不new,直接声明],在槽函数中timer.start() 报警告:不能跨线程调用对象 2.分析 不使用new的方式,直接A a; ...
- ODAC(V9.5.15) 学习笔记(四)TOraQuery (1)
TOraQuery是ODAC中常用的一个组件,其继承关系如下: TDataSet ---TMemDataSet ---TCustomDADataSet ---TOraDataSet ---TCusto ...
- Flutter 第一次运行就出现白屏的问题
--enable-software-rendering 解决办法: 顶部菜单找到 run-->Edit Configurations 中加这么一句:
- SOAP和WebService的那些事
当初对这段历史有过一点研究,不过当初写得关于这部分历史的论文不知道被我丢哪儿去了,下面我用通俗一点的语言来话说一下这段历史吧,因为当初详细到具体人物具体时间的已经记不清了,所以这里写得不够专业,大家就 ...
- 大明A+B(大数相加)解题报告
Problem Description 话说,经过了漫长的一个多月,小明已经成长了许多,所以他改了一个名字叫"大明". 这时他已经不是那个只会做100以内加法的那个"小明 ...
- Hbase与Oracle比较(列式数据库与行式数据库)
Hbase与Oracle比较(列式数据库与行式数据库) 1 主要区别 Hbase适合大量插入同时又有读的情况 Hbase的瓶颈是硬盘传输速度,Oracle的瓶颈是硬盘寻道时间. Hbase本质上只 ...