Linux FAQ

该文档资料来源于网络信息的综合整理,引用太多,无法一一列出,请原作者见谅。

Linux任务前后台的切换

Linux/Unix 区别于微软平台最大的优点就是真正的多用户,多任务。因此在任务管理上也有别具特色的管理思想。
我们知道,在 Windows 上面,我们要么让一个程序作为服务在后台一直运行,要么停止这个服务。而不能让程序在前台后台之间切换。而 Linux 提供了 fg 和 bg 命令,让你轻松调度正在运行的任务。
假设你发现前台运行的一个程序需要很长的时间,但是需要干其他的事情,你就可以用 Ctrl-Z ,终止这个程序,然后可以看到系统提示:
[1]+ Stopped /root/bin/rsync.sh
然后我们可以把程序调度到后台执行:(bg 后面的数字为作业号)
#bg 1
[1]+ /root/bin/rsync.sh &
用 jobs 命令查看正在运行的任务:
#jobs
[1]+ Running /root/bin/rsync.sh &
如果想把它调回到前台运行,可以用
#fg 1
/root/bin/rsync.sh
这样,你在控制台上就只能等待这个任务完成了。

Linux下cron

Linux经过十多年的发展,很多用户都很了解Linux了,这里介绍一下Linux下cron的理解,和大家讨论讨论。cron是一个Linux 定时执行工具,可以在无需人工干预的情况下运行作业,本文档不讲cron实现原理,主要讲一下Linux定时执行工具cron的具体使用及简单介绍。

新增调度任务
推荐使用crontab -e命令添加自定义的任务(编辑的是/var/spool/cron下对应用户的cron文件),退出后重启crond进程,虽然官方文档描述为 “crond命令每分钟会定期检查是否有要执行的工作,如果有要执行的工作便会自动执行该工作。”,但我曾经遇到不重启无法运行任务的情况(也许因为某些 系统crontab是读到内存中的,修改完/etc/crontab后并没有马上执行),可以使用如下方式重新启动cron服务或重新加载cron配置

1. /etc/rc.d/init.d/crond restart

2. service crond reload

同样,我们也可以直接修改/etc/crontab文件来新建任务,/etc/crontab文件内容默认如下:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/sbin:/usr/bin
MAILTO=root //如果出现错误,或者有数据输出,数据作为邮件发给这个帐号
HOME=///使用者运行的路径,这时是根目录
# run -parts
01 * * * * root run-parts /etc/cron.hourly //每小时执行/etc/cron.hourly内的脚本
02 4 * * * root run-parts /etc/cron.daily //每天执行/etc/cron.daily内的脚本
22 4 * * 0 root run-parts /etc/cron.weekly //每周执行/etc/cron.weekly内的脚本
42 4 1 * * root run-parts /etc/cron.monthly //每月执行/etc/cron.monthly内的脚本

注意:
"run-parts"这个参数了,如果去掉这个参数的话,后面就可以写要运行的某表脚本名,而不是文件夹的名了。
/etc/cron.hourly/ ,/etc/cron.dail/ 、cron.weekly/ 、cron.monthly/ 存放着系统预先制定的cron的任务
/etc /crontab文件语法如下:
MinuteHour Day Month Dayofweekcommand
分钟 小时天 月 天每星期命令
每个字段代表的含义如下:

Minute 每个小时的第几分钟执行该任务
Hour 每天的第几个小时执行该任务
Day每月的第几天执行该任务
Month 每年的第几个月执行该任务
DayOfWeek每周的第几天执行该任务
Command 指定要执行的程序
在这些字段里,除 了“Command”是每次都必须指定的字段以外,其它字段皆为可选字段,可视需要决定。对于不指定的字段,要用“*”来填补其位置。

同时,cron支持类似正则表达式的书写,支持如下几个特殊符号定义:
"*"代表取值范围内的数字, 
"/"代表"每", 
"-" 代表从某个数字到某个数字, 
","分开几个离散的数字

举例如下:
5 * ***ls 指定每小时的第5分钟执行一次ls命令
305 ***ls 指定每天的 5:30 执行ls命令
307 8 **ls 指定每月8号的7:30分执行ls命令
50 7 * **rootrun-parts/etc/cron.daily 每天7:50以root 身份执行/etc/cron.daily目录中的所有可执行文件[注:run-parts参数表示,执行后面目录中的所有可执行文件,如果单独执行某个脚本的话,是不需要增加run-parts参数的。]

服务管理
service crond start
service crond stop
service crond restart
service crond reload//启新载入配置

命令选项
-u 指定一个用户
-l 列出某个用户的任务
-r 删除某个用户的任务
-e 编辑某个用户的任务

如:
crontab -u //指定某个用户的cron服务
crontab -l //列出某个用户的cron服务的详细内容
crontab -r //删除某个用户的cron服务
crontab -e //编辑某个用户的cron服务

任务分类
系统工作:系统周期性所要执行的工作,如备份系统数据、清理缓存,系统工作一般都定义在 /etc/crontab文件中
个人工作:某个用户定期要做的工作,如清理3天前的文件

cron用户限制
我们可以对不同用户设置限制,比如允许user1使用cron服务,而user2不允许使用cron服务;可以通过编辑如下两个文件实现这个策略:
/etc/cron.deny 被记录在此的用户不能使用cron任务
/etc/cron.allow 被记录在此的用户可以使用cron任务
注意:如果两个文件都不存在,则默认所有用户均可以使用cron服务

其它:
/var/spool/cron/ 该目录下存放所有用户的cron服务
/var/log/cron 记录cron运行的日志信息。以上就是Linux定时执行工具cron的具体使用及简单介绍。

linux shell下的后台运行以及与前台的转换

当用bash启动一个程序,你可以用在程序后加&,实现程序在后台运行;
例如: emacs &
但如果你忘了输入&;但你又不想把程序停止后重新启动;
你可以这么做:
按Ctrl + Z暂停前台工作,比如前面提到的Emacs;
然后用jobs命令查看当前bash一共启动了多少程序,你可以看到你的emacs在其中,
它的状态是Stoped的; 并且它的jobID也可以看,比如是2
然后用命令bg 2
这样你就可以达到和emacs &一样的效果了.
当你有些工作比如updatedb, find等需要一定时间,这些工作可以考虑让它在后台
运行,而你可以用bash做其它工作
如果需要把任务回到前台,只需要fg 2

Linux查看端口占用情况,并强制释放占用的端口

有时候关闭软件后,后台进程死掉,导致端口被占用。下面以TOMCAT端口8060被占用为例,列出详细解决过程。

解决方法:

1.查找被占用的端口

1. netstat -tln 

2. netstat -tln | grep 8060

netstat -tln 查看端口使用情况,而netstat -tln | grep 8060则是只查看端口8060的使用情况

2.查看端口属于哪个程序?端口被哪个进程占用

lsof -i:8060

COMMAND   PID   USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME

java    20804   root   36u  IPv6 35452317      0t0  TCP *:pcsync-https (LISTEN)

3.杀掉占用端口的进程 根据pid杀掉

kill -9 进程id

kill -9 20804

posted on 2013-01-07 09:20  wolfsky  阅读(275)  评论(0编辑  收藏  举报

导航