第四章、计划任务

4.1 使用at定义一次性的计划任务

$ sudo systemctl is-enabled atd.service  开机运行

enabled

$ sudo systemctl status atd.service  保证该服务是已经运行了的

atd.service - Job spooling tools

Loaded: loaded (/usr/lib/systemd/system/atd.service; enabled)

Active: active (running) since 六 2014-07-1909:04:06 CST; 27min ago

定义时间:

now+5min

teatimetomorrow 明天下午4点  16:00

noon+4 days

5pmaugust 3 2016

07190937  <---7月19日09:37

07190937  <---7月19日09:37没写年份就是今年,如果17年,则0719093717

编辑任务

# at -t 07190937

at> wall "can you see me?"

at> <EOT>

job 1 at Sat Jul 19 09:37:00 2014

# echo "date > ~/myjob" | atnow +3min

我的操作

[student@desktop0Desktop]$ date

Sun Jun 25 15:12:13CST 2017

[student@desktop0Desktop]$

[student@desktop0Desktop]$ at -t 06251515

at> wall "canyou see me "

at> <EOT>  (ctrl+D)退出并制订成功

job 1 at Sun Jun 2515:15:00 2017

[student@desktop0Desktop]$

[student@desktop0Desktop]$ atq  查看当前任务

1       Sun Jun 25 15:15:00 2017 a student

[student@desktop0Desktop]$ date

Sun Jun 25 15:14:46CST 2017

[student@desktop0Desktop]$

Broadcast message fromstudent@desktop0.example.com (Sun Jun 25 15:15:01 2017):

can you see me

[student@desktop0Desktop]$

再来一次操作:

[student@desktop0Desktop]$ at now +2min

at> wall "canyou see me this time"

at> <EOT>

job 2 at Sun Jun 2515:18:00 2017

[student@desktop0Desktop]$ atq

2       Sun Jun 25 15:18:00 2017 a student

[student@desktop0Desktop]$ date

Sun Jun 25 15:16:48CST 2017

[student@desktop0Desktop]$

计划生成的文件

[root@desktop0 ~]# ls/var/spool/at/a00002017d0e76

/var/spool/at/a00002017d0e76

[root@desktop0 ~]# ls/var/spool/at/

a00002017d0e76  spool

at –c 4

vim var/spool/at/a00002017d0e76

atq

atrm  4

======================================================

定义任务的队列: a-z ,A-Z, 更大的字母执行优先级更高

a队列默认给at , b队列默认给batch(当系统负载小于0.8的时候自动执行)

查看负载

[root@desktop0 /]#uptime

15:36:25 up 3:07,  2 users,  load average: 0.01, 0.06, 0.06

[root@desktop0 /]#

Batch马上执行(负载小于0.8)

# at -q g teatime tomorrow

# at -q b 16:05 tomorrow

如果任务比较复杂,命令比较多,可以把操作编辑成shell脚本:

# at -t 07190950 -f /path/to/app.sh

# atq  查看用at定义的计划任务

1       SatJul 19 09:37:00 2014 a root

# at -t 07190950

at> echo "log into file" >/tmp/log.txt

at> echo "can you see me?">> /tmp/log.txt

at> <EOT>  <---- 按ctrl + d  结束任务编辑

job 2 at Sat Jul 19 09:50:00 2014

# at -c 2 查看编号为2的任务的具体代码

# atrm 2  删除编号为2的任务

[root@desktop0 ~]#echo "date >/myjob" | at now+3min

job 3 at Sun Jun 2515:31:00 2017

[root@desktop0 ~]#atq

3       Sun Jun 25 15:31:00 2017 a root

[root@desktop0 ~]#date

Sun Jun 25 15:29:00CST 2017

[root@desktop0 ~]# at-c 3

#!/bin/sh

# atrun uid=0 gid=0

# mail student 0

umask 22

XDG_VTNR=1; exportXDG_VTNR

XDG_SESSION_ID=1;export XDG_SESSION_ID

HOSTNAME=desktop0.example.com;export HOSTNAME

SHELL=/bin/bash;export SHELL

HISTSIZE=1000; exportHISTSIZE

USER=root; exportUSER

LS_COLORS=rs=0:di=38\;5\;27:ln=38\;5\;51:mh=44\;38\;5\;15:pi=40\;38\;5\;11:so=38\;5\;13:do=38\;5\;5:bd=48\;5\;232\;38\;5\;11:cd=48\;5\;232\;38\;5\;3:or=48\;5\;232\;38\;5\;9:mi=05\;48\;5\;232\;38\;5\;15:su=48\;5\;196\;38\;5\;15:sg=48\;5\;11\;38\;5\;16:ca=48\;5\;196\;38\;5\;226:tw=48\;5\;10\;38\;5\;16:ow=48\;5\;10\;38\;5\;21:st=48\;5\;21\;38\;5\;15:ex=38\;5\;34:\*.tar=38\;5\;9:\*.tgz=38\;5\;9:\*.arc=38\;5\;9:\*.arj=38\;5\;9:\*.taz=38\;5\;9:\*.lha=38\;5\;9:\*.lz4=38\;5\;9:\*.lzh=38\;5\;9:\*.lzma=38\;5\;9:\*.tlz=38\;5\;9:\*.txz=38\;5\;9:\*.tzo=38\;5\;9:\*.t7z=38\;5\;9:\*.zip=38\;5\;9:\*.z=38\;5\;9:\*.Z=38\;5\;9:\*.dz=38\;5\;9:\*.gz=38\;5\;9:\*.lrz=38\;5\;9:\*.lz=38\;5\;9:\*.lzo=38\;5\;9:\*.xz=38\;5\;9:\*.bz2=38\;5\;9:\*.bz=38\;5\;9:\*.tbz=38\;5\;9:\*.tbz2=38\;5\;9:\*.tz=38\;5\;9:\*.deb=38\;5\;9:\*.rpm=38\;5\;9:\*.jar=38\;5\;9:\*.war=38\;5\;9:\*.ear=38\;5\;9:\*.sar=38\;5\;9:\*.rar=38\;5\;9:\*.alz=38\;5\;9:\*.ace=38\;5\;9:\*.zoo=38\;5\;9:\*.cpio=38\;5\;9:\*.7z=38\;5\;9:\*.rz=38\;5\;9:\*.cab=38\;5\;9:\*.jpg=38\;5\;13:\*.jpeg=38\;5\;13:\*.gif=38\;5\;13:\*.bmp=38\;5\;13:\*.pbm=38\;5\;13:\*.pgm=38\;5\;13:\*.ppm=38\;5\;13:\*.tga=38\;5\;13:\*.xbm=38\;5\;13:\*.xpm=38\;5\;13:\*.tif=38\;5\;13:\*.tiff=38\;5\;13:\*.png=38\;5\;13:\*.svg=38\;5\;13:\*.svgz=38\;5\;13:\*.mng=38\;5\;13:\*.pcx=38\;5\;13:\*.mov=38\;5\;13:\*.mpg=38\;5\;13:\*.mpeg=38\;5\;13:\*.m2v=38\;5\;13:\*.mkv=38\;5\;13:\*.webm=38\;5\;13:\*.ogm=38\;5\;13:\*.mp4=38\;5\;13:\*.m4v=38\;5\;13:\*.mp4v=38\;5\;13:\*.vob=38\;5\;13:\*.qt=38\;5\;13:\*.nuv=38\;5\;13:\*.wmv=38\;5\;13:\*.asf=38\;5\;13:\*.rm=38\;5\;13:\*.rmvb=38\;5\;13:\*.flc=38\;5\;13:\*.avi=38\;5\;13:\*.fli=38\;5\;13:\*.flv=38\;5\;13:\*.gl=38\;5\;13:\*.dl=38\;5\;13:\*.xcf=38\;5\;13:\*.xwd=38\;5\;13:\*.yuv=38\;5\;13:\*.cgm=38\;5\;13:\*.emf=38\;5\;13:\*.axv=38\;5\;13:\*.anx=38\;5\;13:\*.ogv=38\;5\;13:\*.ogx=38\;5\;13:\*.aac=38\;5\;45:\*.au=38\;5\;45:\*.flac=38\;5\;45:\*.mid=38\;5\;45:\*.midi=38\;5\;45:\*.mka=38\;5\;45:\*.mp3=38\;5\;45:\*.mpc=38\;5\;45:\*.ogg=38\;5\;45:\*.ra=38\;5\;45:\*.wav=38\;5\;45:\*.axa=38\;5\;45:\*.oga=38\;5\;45:\*.spx=38\;5\;45:\*.xspf=38\;5\;45:;export LS_COLORS

MAIL=/var/spool/mail/root;export MAIL

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin;export PATH

PWD=/root; export PWD

LANG=en_US.UTF-8;export LANG

HISTCONTROL=ignoredups;export HISTCONTROL

SHLVL=1; export SHLVL

XDG_SEAT=seat0;export XDG_SEAT

HOME=/root; exportHOME

LOGNAME=root; exportLOGNAME

LESSOPEN=\|\|/usr/bin/lesspipe.sh\%s; export LESSOPEN

cd /root || {

echo 'Execution directory inaccessible'>&2

exit 1

}

${SHELL:-/bin/sh}<< 'marcinDELIMITER21901fb4'

date >/myjob

marcinDELIMITER21901fb4

[root@desktop0 ~]# ls/home/student/myjob

ls: cannot access/home/student/myjob: No such file or directory

[root@desktop0 ~]#atq

3       Sun Jun 25 15:31:00 2017 a root

[root@desktop0 ~]#

验证结果

[root@desktop0 /]# cat myjob

Sun Jun 25 15:31:01 CST 2017

[root@desktop0 /]#

先编辑一个文件,再显示出来

[root@desktop0 /]# at now +1min -f /myjob

job 7 at Sun Jun 25 15:42:00 2017

[root@desktop0 /]#

cat myjob

echo "123"

echo "abc"

echo "can you see my, i am in my job"

[root@desktop0 /]# at now +1min -f /myjob

job 11 at Sun Jun 25 15:48:00 2017

[root@desktop0 /]# atq

4       Sun Jun 2515:37:00 2017 b root

11     Sun Jun 2515:48:00 2017 a root

[root@desktop0 /]# date

Sun Jun 25 15:47:04 CST 2017

[root@desktop0 /]# at -c 11

#!/bin/sh

# atrun uid=0 gid=0

# mail student 0

umask 22

XDG_VTNR=1; export XDG_VTNR

XDG_SESSION_ID=1; export XDG_SESSION_ID

HOSTNAME=desktop0.example.com; export HOSTNAME

SHELL=/bin/bash; export SHELL

HISTSIZE=1000; export HISTSIZE

USER=root; export USER

LS_COLORS=rs=0:di=38\;5\;27:ln=38\;5\;51:mh=44\;38\;5\;15:pi=40\;38\;5\;11:so=38\;5\;13:do=38\;5\;5:bd=48\;5\;232\;38\;5\;11:cd=48\;5\;232\;38\;5\;3:or=48\;5\;232\;38\;5\;9:mi=05\;48\;5\;232\;38\;5\;15:su=48\;5\;196\;38\;5\;15:sg=48\;5\;11\;38\;5\;16:ca=48\;5\;196\;38\;5\;226:tw=48\;5\;10\;38\;5\;16:ow=48\;5\;10\;38\;5\;21:st=48\;5\;21\;38\;5\;15:ex=38\;5\;34:\*.tar=38\;5\;9:\*.tgz=38\;5\;9:\*.arc=38\;5\;9:\*.arj=38\;5\;9:\*.taz=38\;5\;9:\*.lha=38\;5\;9:\*.lz4=38\;5\;9:\*.lzh=38\;5\;9:\*.lzma=38\;5\;9:\*.tlz=38\;5\;9:\*.txz=38\;5\;9:\*.tzo=38\;5\;9:\*.t7z=38\;5\;9:\*.zip=38\;5\;9:\*.z=38\;5\;9:\*.Z=38\;5\;9:\*.dz=38\;5\;9:\*.gz=38\;5\;9:\*.lrz=38\;5\;9:\*.lz=38\;5\;9:\*.lzo=38\;5\;9:\*.xz=38\;5\;9:\*.bz2=38\;5\;9:\*.bz=38\;5\;9:\*.tbz=38\;5\;9:\*.tbz2=38\;5\;9:\*.tz=38\;5\;9:\*.deb=38\;5\;9:\*.rpm=38\;5\;9:\*.jar=38\;5\;9:\*.war=38\;5\;9:\*.ear=38\;5\;9:\*.sar=38\;5\;9:\*.rar=38\;5\;9:\*.alz=38\;5\;9:\*.ace=38\;5\;9:\*.zoo=38\;5\;9:\*.cpio=38\;5\;9:\*.7z=38\;5\;9:\*.rz=38\;5\;9:\*.cab=38\;5\;9:\*.jpg=38\;5\;13:\*.jpeg=38\;5\;13:\*.gif=38\;5\;13:\*.bmp=38\;5\;13:\*.pbm=38\;5\;13:\*.pgm=38\;5\;13:\*.ppm=38\;5\;13:\*.tga=38\;5\;13:\*.xbm=38\;5\;13:\*.xpm=38\;5\;13:\*.tif=38\;5\;13:\*.tiff=38\;5\;13:\*.png=38\;5\;13:\*.svg=38\;5\;13:\*.svgz=38\;5\;13:\*.mng=38\;5\;13:\*.pcx=38\;5\;13:\*.mov=38\;5\;13:\*.mpg=38\;5\;13:\*.mpeg=38\;5\;13:\*.m2v=38\;5\;13:\*.mkv=38\;5\;13:\*.webm=38\;5\;13:\*.ogm=38\;5\;13:\*.mp4=38\;5\;13:\*.m4v=38\;5\;13:\*.mp4v=38\;5\;13:\*.vob=38\;5\;13:\*.qt=38\;5\;13:\*.nuv=38\;5\;13:\*.wmv=38\;5\;13:\*.asf=38\;5\;13:\*.rm=38\;5\;13:\*.rmvb=38\;5\;13:\*.flc=38\;5\;13:\*.avi=38\;5\;13:\*.fli=38\;5\;13:\*.flv=38\;5\;13:\*.gl=38\;5\;13:\*.dl=38\;5\;13:\*.xcf=38\;5\;13:\*.xwd=38\;5\;13:\*.yuv=38\;5\;13:\*.cgm=38\;5\;13:\*.emf=38\;5\;13:\*.axv=38\;5\;13:\*.anx=38\;5\;13:\*.ogv=38\;5\;13:\*.ogx=38\;5\;13:\*.aac=38\;5\;45:\*.au=38\;5\;45:\*.flac=38\;5\;45:\*.mid=38\;5\;45:\*.midi=38\;5\;45:\*.mka=38\;5\;45:\*.mp3=38\;5\;45:\*.mpc=38\;5\;45:\*.ogg=38\;5\;45:\*.ra=38\;5\;45:\*.wav=38\;5\;45:\*.axa=38\;5\;45:\*.oga=38\;5\;45:\*.spx=38\;5\;45:\*.xspf=38\;5\;45:;export LS_COLORS

MAIL=/var/spool/mail/root; export MAIL

PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin;export PATH

PWD=/; export PWD

LANG=en_US.UTF-8; export LANG

HISTCONTROL=ignoredups; export HISTCONTROL

SHLVL=1; export SHLVL

XDG_SEAT=seat0; export XDG_SEAT

HOME=/root; export HOME

LOGNAME=root; export LOGNAME

LESSOPEN=\|\|/usr/bin/lesspipe.sh\ %s; export LESSOPEN

OLDPWD=/home; export OLDPWD

cd / || {

echo 'Execution directory inaccessible'>&2

exit 1

}

${SHELL:-/bin/sh} << 'marcinDELIMITER019ea5a8'

echo "123"

echo "abc"

echo "can you see my, i am in my job"

marcinDELIMITER019ea5a8

[root@desktop0 /]# date

Sun Jun 25 15:47:30 CST 2017

4.2 crond指定周期性的计划任务: 在指定的时间重复执行

保证服务开机是自动启动,并且当前状态也是运行状态:

# systemctl is-enabled crond

enabled

[root@desktop0 ~]# systemctl status crond

crond.service - Command Scheduler

Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled)

Active: active (running) since Sat 2014-07-19 09:19:39 CST; 27min ago

MainPID: 546 (crond)

如果不是开机启动的,可以手工设定为开机自动启动:

# systemctl enable crond

如果当前是inactive状态的,需要马上启动该服务:

# systemctl start crond

每个用户默认清情况下,都可以使用命令crontab设定计划任务

# crontab -e

* * * * * date >> /tmp/date.txt  每分钟

*/5 * * * * echo "uplooking" >> /tmp/upl.txt    每5分钟执行一次

0 13 * * * /sbin/init 0  每天下午13点整

30 02 1,15 * *  echo "crond jobs"  >> /tmp/uplooking.txt  每个月1号,15号执行一次

时间的语法还有:

*/2   每2???

1,2,5

1-14

1-5,10-15

时间的取值范围:

分钟  0-59

小时  0-23

日    1-31

月    1-12

星期   0-7  ,0和7都是代表星期天

*/5 2 */3 * *  不管是星期几,每月中,每隔3天的凌晨2点,每隔5分钟执行一次

5月1日

02:00,02:05,02:10

5月3日

02:00,02:05,02:10,...02:58

# crontab -l  查看自己的计划任务

# crontab -l -u student 管理员可以查看其他帐号的任务

# crontab -r 删除当前用户的所有计划任务

可以通过查看日志,判断计划任务是否被顺利执行

# vim /var/log/cron

...

# cat /etc/cron.deny   <----一个用户名一行,表示那些用户不能使用crontab命令编辑计划任务

student

# vim /etc/cron.allow 该文件默认是没有,里面指定了哪些用户可以使用命令制定计划任务。如果该文件存在,那么cron.deny就会失效

student

同时root可以直接编辑 /etc/crontab文件制定任务

# vim /etc/crontab

* * * * * root   date >> /tmp/date.txt

*/2 * * * * student echo "i am student" >> /tmp/student.txt

*/5 * * * * root echo "uplooking" > /dev/null

^^^^^ 必须指定执行该任务的身份

* * * * * date >> ~/mycrondjob.txt

分钟  小时  天 月   星期

[root@desktop0 /]# cat ~/mycrondjob.txt

Sun Jun 25 16:48:02 CST 2017

Sun Jun 25 16:49:01 CST 2017

[root@desktop0 /]# crontab -l

* * * * * date >> ~/mycrondjob.txt

[root@desktop0 /]# cat ~/mycrondjob.txt

Sun Jun 25 16:48:02 CST 2017

Sun Jun 25 16:49:01 CST 2017

[root@desktop0 /]# cat/var/spool/cron/root  会产生相应的文件

*/2 * * * * date >>~/mycrondjob.txt

4.3 管理临时文件

开机运行服务systemd-tmpfiles-setup,该服务调用以下命令:

systemd-tmpfiles--create --remove  读取以下配置文件:

/usr/lib/tmpfiles.d/*.conf,/run/tmpfiles.d/*.conf, and /etc/tmpfiles.d/*.conf

删除需要删除的文件、目录,创建需要的目录、文件,修复权限等

在长期开机运行的系统中,rhel7会有一个systemd-tmpfiles-clean.timer单元模块保证定义执行以下命令对临时文件进行管理:systemd启动后,15分钟后将运行systemd-tmpfiles-clean服务,并且每24小时候重复执行

systemd-tmpfiles--clean  该命令不会创建或修改文件目录,只会删除超过指定时间未被访问过的文件

语法:tmpfiles.d(5)

#Type Path        Mode UID  GID  AgeArgument

d    /run/user   0755 root root 10d -

d  目录不存在则创建

systemd-tmpfiles--create --remove  目录不存在会自动创建,如果目录存在,不管文件是否过期,都不会清空目录

systemd-tmpfiles--clean  目录不存在也不会创建,如果目录存在,只会删除目录里超过指定时间未被访问过的文件

D  创建目录或者清空目录

systemd-tmpfiles--create --remove  目录不存在会创建,如果目录存在,不管文件是否过期,都会被清空

systemd-tmpfiles--clean  目录不存在也不会创建,如果目录存在,只会删除目录里超过指定时间未被访问过的文件

例子:

d/run/systemd/seats 0755 root root -   目录不存在会自动建立,目录存在,不会自动清空目录 (除非最后一列 - 以时间代替)

D/home/student 0700 student student 1d  目录不存在会自动建立,目录存在,会清空目录,当systemd-tmpfiles —-clean 会删除已经超过一天没有改变的文件

练习1:

更改/tmp/目录的临时文件默认管理选项。把配置文件从/usr/lib/tmpfiles.d/tmp.conf 拷贝到 /etc/tmpfiles.d/ ,并且把目录的管理周期从10天修改成5天

# cp /usr/lib/tmpfiles.d/tmp.conf/etc/tmpfiles.d/

# vim /etc/tmpfiles.d/tmp.conf

d /tmp 1777 root root 5d  <---把原来的10d修改成5d

编辑完毕,执行该命令,让其应用新的配置选项

# systemd-tmpfiles --clean tmp.conf

练习:

假设 lee 服务(程序)会调用 临时目录/run/lee,要求该目录下的内容超过30秒未被访问都会被删除,而且该目录只有root可以读写

1、定义一个配置文件

# vim /etc/tmpfiles.d/lee.conf

d /run/lee 0700 root root 30s

测试

# systemd-tmpfiles --create lee.conf

--create发现目录不存在,就会自动创建,如果目录存在,会判断权限是否正确,不正确会自动纠正

创建一个文件

# touch /run/lee/test

等待30秒

# sleep 30s

手工执行该命令,并且根据指定的配置文件进行管理临时文件

# systemd-tmpfiles --clean lee.conf

# ls /run/lee/

转载于:https://blog.51cto.com/hciewd/1941706

RH134-04 计划任务相关推荐

  1. linux每个版本发布时间,Ubuntu 21.04各版本的发布时间公布和计划功能介绍

    本文介绍Ubuntu 21.04(代号是Hirsute Hippo)各版本的发布时间和计划推出的功能. 具体发布时间公布 以下是Ubuntu 21.04 Hirsute Hippo各种版本的推出时间, ...

  2. 【转】ubuntu14.04 trusty的源

    原文网址:http://blog.chinaunix.net/uid-15041-id-4821715.html 一.编辑更新源文件:/etc/apt/sources.list 二.更新源索引文件:a ...

  3. linux实验总结及心得_安全实验室 | 内网渗透—Linux权限维持技巧总结

    在上一篇文章中我们介绍了内网渗透中Windows环境下进行权限维持(点击阅读)的方式,本期我们将视角集中在Linux系统中继续对内网渗透中的权限维持方式进行探索.Linux也是在内网渗透中很常见的操作 ...

  4. DeFi黑暗森林历险记,我这样追回了百万美元

    最大的问题是,被黑了的钱包已经在一个 DeFi 智能合约上抵押了 120 万美元的 ERC20 USDC 稳定币,而且是采取流动性挖矿的模式(将资金投入到不同 DeFi 协议中来赚取最大回报). 原文 ...

  5. 从程序员到大厂CTO,这5个习惯让我终身受益

    --感谢零代码厂商明道云对原创内容的支持-- 作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 英国大哲学家培根曾说过:"习惯有种顽强的.巨大 ...

  6. 27岁技术总监,收入太高,心头慌得一比。。。

    作者| Mr.K   编辑| Emma 来源| 技术领导力(ID:jishulingdaoli) 一位读者向我咨询: K哥,我是某跨境电商技术总监,今年27岁,公司元老,跟着公司一起发展起来的,3年的 ...

  7. 从技术走向管理(李元芳履职记)--摘抄总结

    一.管理菜鸟在脱变 01     赶鸭子上架     从事五年半一线技术工作的李元芳,由于技术能力强.工作业绩突出,被公司领导提拔为部门副经理     后续对李元芳履职情况进行描述的起笔     6 ...

  8. 工作十年总结的这36条项目管理经验,总有一条能戳中你

    有人说:项目管理是变理想为现实,化抽象为具体的一门科学和艺术. 这是对项目管理的一种精辟总结.项目管理专业的方法和知识能教会我们如何快捷.科学.艺术地做事. 因为它除了交付项目,更能管理人生. 毕业后 ...

  9. 对话 Contributor| 中国团队贡献的开源项目, 当然要支持

     点亮 ⭐️ Star · 照亮开源之路 GitHub:https://github.com/apache/dolphinscheduler 夏日炎炎,高温可能会影响我们的食欲或者上班的心情,但却挡不 ...

  10. 用代码向90后逝去的青春致敬

    点击上方"程序人生",选择"置顶公众号" 第一时间关注程序猿(媛)身边的故事 图片源自:昨日青空 作者 Don Lex 如需转载,请联系原作者授权. 前段时间, ...

最新文章

  1. Windows安全软件长臂管辖的折中方案?
  2. java agv,Java 访问控制关键字
  3. adb 相关问题总结
  4. 没有违反GPL,他们真的给了源码
  5. P3345 [ZJOI2015]幻想乡战略游戏
  6. python for循环1 到10_python for循环(1)
  7. 用计算机绘图软件绘制的工程图是图形,用AutoCAD快速绘制机械工程图实用的经验.doc...
  8. latex 伪代码 return怎么写 不换行怎么办
  9. 虚拟机安装黑苹果【虚拟机安装,黑苹果安装,黑苹果无法全屏问题】(这应该全网最全的资源了吧~)
  10. 秋招历险记-计算机网络篇
  11. 51单片机Proteus仿真+Keil工程-实验5-单片机串行口中断实验
  12. leetcode 1114
  13. 怎么在contenteditable可编辑的div插入图片
  14. EXCEL表单元格内特定内容的提取
  15. Unity刘海屏幕适配
  16. App在后台被杀死后重启-重进首页方法
  17. 每日一题4.12.1
  18. MySQL子查询(嵌套查询)
  19. STL之string用法详解
  20. 利用VC++与MSXML解析XML文档

热门文章

  1. Linux 安装配置SVN详细步骤
  2. 更改照片大小方法(用于网页上传图片)
  3. .net html转为pdf,在.NET中将HTML转换为PDF
  4. 如何利用多传感器融合技术解决机器人可靠定位问题?
  5. python行人检测_基于YOLOv3的行人检测
  6. 【一看就懂】数据结构以及各种算法的可视化演示工具
  7. 小学奥数的学习路径是什么
  8. PTA 7-14电话狂人
  9. QPixmap的用法
  10. 高效工作——表格巧应用——表格制图(文字版)