当前位置:首页 » 操作系统 » linuxsleepon

linuxsleepon

发布时间: 2022-05-22 14:14:54

㈠ 如何让linux定时任务crond以秒为单位执行

需要用到Shell脚本每隔3秒钟去监控一个软件进程的运行状态,发现crond似乎只支持到分,不知道秒,怎么办呢?
第一种方法:
当然首先想到的是写一个触发的脚本,在触发脚本中使用死循环来解决此问题,如下:
cat kick.sh

1
2
3
4
5

#!/bin/bash
while : ;do
/home/somedir/scripts.sh 2>/dev/null &
sleep 3
done

注意第一次运行时请不要使用 bash kick.sh & 这种后台运行的方式,它会僵死的。
可以把它放到计划任务使其运行,然后将计划任务中的此条目删除即可。最后把这个脚本放到 /etc/rc.local 让它每次开机都可以被运行。

第二种方法:
和第一种方法类似,只不过感觉比第一种更便捷一些。
cat cron-seconds.sh

1
2
3
4
5
6
7
8
9

#!/bin/bash
#For excuting the scripts every 3 seconds in crond.
#20100124.WXG

for((i=1;i<=20;i++));do

/home/somedir/scripts.sh 2>/dev/null &
sleep 3
done

然后写入的crontab里每分钟执行一次,如下
crontab -e

1

* * * * * /bin/bash /home/somedir/cron-seconds.sh

第三种方法:
那么如何使用计划任务来直接实现呢?
最后解决方案如下,经验证,脚本运行非常稳定。
crontab -e

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22

## For excuting scripts.sh every 3 seconds##on 2014-10-15
*/1 * * * * /home/somedir/scripts.sh
*/1 * * * * sleep 3 && /home/somedir/scripts.sh
*/1 * * * * sleep 6 && /home/somedir/scripts.sh
*/1 * * * * sleep 9 && /home/somedir/scripts.sh
*/1 * * * * sleep 12 && /home/somedir/scripts.sh
*/1 * * * * sleep 15 && /home/somedir/scripts.sh
*/1 * * * * sleep 18 && /home/somedir/scripts.sh
*/1 * * * * sleep 21 && /home/somedir/scripts.sh
*/1 * * * * sleep 24 && /home/somedir/scripts.sh
*/1 * * * * sleep 27 && /home/somedir/scripts.sh
*/1 * * * * sleep 30 && /home/somedir/scripts.sh
*/1 * * * * sleep 33 && /home/somedir/scripts.sh
*/1 * * * * sleep 36 && /home/somedir/scripts.sh
*/1 * * * * sleep 39 && /home/somedir/scripts.sh
*/1 * * * * sleep 42 && /home/somedir/scripts.sh
*/1 * * * * sleep 45 && /home/somedir/scripts.sh
*/1 * * * * sleep 48 && /home/somedir/scripts.sh
*/1 * * * * sleep 51 && /home/somedir/scripts.sh
*/1 * * * * sleep 54 && /home/somedir/scripts.sh
*/1 * * * * sleep 57 && /home/somedir/scripts.sh
#-----------------------------------------------------------------

他的思路是:先每隔1秒钟触发定时任务,然后又休眠 3秒、6秒、9秒等间隔 来执行具体的Shell脚本

㈡ linux如何修改锁屏时间

因为你没说你用哪种发行版的 Linux 、用哪种图形用户界面,没法细说。
举例: Ubuntu - Gome:
在桌面时候,按一下Win键,左上角会出来一个搜索的窗口,输入:system ,你就会发现有一个齿轮状的图标,叫System Setting ,鼠标单击它,然后就能看到各种设置界面了,修改锁屏时间选择Screen,就可以修改了。

㈢ Linux进程转换状态函数源代码怎样获取

可以使用google代码搜索,http://code.google.com/intl/zh-CN/
帮你找了一下下,
http://www.google.cn/codesearch/p?hl=zh-CN#7_68JW9_sJ8/linux/kernel/fork.c&q=sys_exit()

进去找就有了

㈣ linux C语言select函数怎么不能实现sleep呀

我修改了一下,运行一下试试,祝你好运:

#include <stdio.h>
#include <sys/select.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

int main()
{
struct timeval tv;
int i =0;
while( i++ < 10)
{
tv.tv_sec = 1;
tv.tv_usec = 0;
printf("%d\n", i);
fflush(stdout);
int ret = select (0, NULL, NULL, NULL, &tv);
if (ret == -1)
{
fprintf (stdout, "select error . errno=%d [%s]\n", errno, strerror(errno));
break;
}
//sleep(1);
//usleep(1000000);
}
return 0;
}

㈤ linux中如何实现sleep(0)的功能

linux下的sleep(0),有些时候被实现为下面这样:

unsigned int sleep (unsigned int seconds)
{
……
/* This is not necessary but some buggy programs depend on this. */
if (seconds == 0)
return 0;
……
}

如果你的程序对实时性要求不那么高,可以使用usleep(1),不然就只能用信号或者其他事件机制了。

㈥ 如何查看linux下进程状态 技术支持

linux上进程有5种状态:
1. 运行(正在运行或在运行队列中等待)
2. 中断(休眠中, 受阻, 在等待某个条件的形成或接受到信号)
3. 不可中断(收到信号不唤醒和不可运行, 进程必须等待直到有中断发生)
4. 僵死(进程已终止, 但进程描述符存在, 直到父进程调用wait4()系统调用后释放)
5. 停止(进程收到SIGSTOP, SIGSTP, SIGTIN, SIGTOU信号后停止运行运行)

ps工具标识进程的5种状态码:
D 不可中断 uninterruptible sleep (usually IO)
R 运行 runnable (on run queue)
S 中断 sleeping
T 停止 traced or stopped
Z 僵死 a defunct ("zombie") process
注: 其它状态还包括W(无驻留页), <(高优先级进程), N(低优先级进程), L(内存锁页).

可以用下面命令查看进程状态
ps -aux
列出类似程序树的程序显示(显示进程下有哪些子进程)
ps -axjf
找出与 cron 与 syslog 这两个服务有关的 PID 号码
ps aux | egrep '(cron|syslog)'
也可以这样使用ps格式输出来查看进程状态:
ps -eo user,stat..,cmd

user 用户名
uid 用户号
pid 进程号
ppid 父进程号
size 内存大小, Kbytes字节.
vsize 总虚拟内存大小, bytes字节(包含code+data+stack)
share 总共享页数
nice 进程优先级(缺省为0, 最大为-20)
priority(pri) 内核调度优先级
pmem 进程分享的物理内存数的百分比
trs 程序执行代码驻留大小
rss 进程使用的总物理内存数, Kbytes字节
time 进程执行起到现在总的CPU暂用时间
stat 进程状态
cmd(args) 执行命令的简单格式

例子:
查看当前系统进程的uid,pid,stat,pri, 以uid号排序.
ps -eo pid,stat,pri,uid --sort uid

查看当前系统进程的user,pid,stat,rss,args, 以rss排序.
ps -eo user,pid,stat,rss,args --sort rss

在Linux下,还有一种方法检查某个进程是否存在:利用/proc文件系统. /proc/pid/stat里面有进程的状态,进程可执行文件名等.如果该文件不存在了,那进程肯定退出了.如果存在,可以检查状态和文件名是否正确.效率可能比PS还是高一些,因为/proc是虚拟文件系统,存在与内存中.

如何利用/proc文件系统
cat /proc/pid/status
这里pid是你的进程ID,看看输出结果,有一栏是State

你要利用/proc文件系统时,int fd = open( "/proc/pid/status", O_RDONLY );
这里pid是实际的进程的pid,如果open失败,刚进程显然不存在,然后读取该文件的内容,找出State

㈦ 在Linux下怎么查看网络接口的速率

写个脚本查看:脚本如下、加x权限、执行就可看以了

#!/bin/bash
while [ "1" ]
do
eth=$1
RXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
TXpre=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')
sleep 1
RXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $2}')
TXnext=$(cat /proc/net/dev | grep $eth | tr : " " | awk '{print $10}')
clear
echo -e "\t RX `date +%k:%M:%S` TX"
RX=$((${RXnext}-${RXpre}))
TX=$((${TXnext}-${TXpre}))
if [[ $RX -lt 1024 ]];then
RX="${RX}B/s"
elif [[ $RX -gt 1048576 ]];then
RX=$(echo $RX | awk '{print $1/1048576 "MB/s"}')
else
RX=$(echo $RX | awk '{print $1/1024 "KB/s"}')
fi
if [[ $TX -lt 1024 ]];then
TX="${TX}B/s"
elif [[ $TX -gt 1048576 ]];then
TX=$(echo $TX | awk '{print $1/1048576 "MB/s"}')
else
TX=$(echo $TX | awk '{print $1/1024 "KB/s"}')
fi
echo -e "$eth \t $RX $TX "
done

㈧ Linux 如何查看后台执行的pipeline。 例如,bash is下面运行了 '(sleep 36000;

一、在Linux中,如果要让进程在后台运行,一般情况下,我们在命令后面加上&即可,实际上,这样是将命令放入到一个作业队列中了:
$ ./test.sh & [1] 17208 $ jobs -l [1]+ 17208 Running ./test.sh &
二、对于已经在前台执行的命令,也可以重新放到后台执行,首先按ctrl+z暂停已经运行的进程,然后使用bg命令将停止的作业放到后台运行:

$ ./test.sh [1]+ Stopped ./test.sh $ bg %1 [1]+ ./test.sh & $ jobs -l [1]+ 22794 Running ./test.sh &
三、但是如上方到后台执行的进程,其父进程还是当前终端shell的进程,而一旦父进程退出,则会发送hangup信号给所有子进程,子进程收到hangup以后也会退出。如果我们要在退出shell的时候继续运行进程,则需要使用nohup忽略hangup信号,或者setsid将将父进程设为init进程(进程号为1)

$ echo $$ 21734 $ nohup ./test.sh & [1] 29016 $ ps -ef | grep test 515 29710 21734 0 11:47 pts/12 00:00:00 /bin/sh ./test.sh 515 29713 21734 0 11:47 pts/12 00:00:00 grep test
$ setsid ./test.sh & [1] 409 $ ps -ef | grep test 515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh 515 413 21734 0 11:49 pts/12 00:00:00 grep test
四、上面的试验演示了使用nohup/setsid加上&使进程在后台运行,同时不受当前shell退出的影响。那么对于已经在后台运行的进程,该怎么办呢?可以使用disown命令:

$ ./test.sh & [1] 2539 $ jobs -l [1]+ 2539 Running ./test.sh & $ disown -h %1 $ ps -ef | grep test 515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh 515 2542 21734 0 11:52 pts/12 00:00:00 grep test
五、另外还有一种方法,即使将进程在一个subshell中执行,其实这和setsid异曲同工。方法很简单,将命令用括号() 括起来即可:

$ (./test.sh &) $ ps -ef | grep test 515 410 1 0 11:49 ? 00:00:00 /bin/sh ./test.sh 515 12483 21734 0 11:59 pts/12 00:00:00 grep test
注:本文试验环境为Red Hat Enterprise Linux AS release 4 (Nahant Update 5),shell为/bin/bash,不同的OS和shell可能命令有些不一样。例如AIX的ksh,没有disown,但是可以使用nohup -p PID来获得disown同样的效果。

六、还有一种更加强大的方式是使用screen,首先创建一个断开模式的虚拟终端,然后用-r选项重新连接这个虚拟终端,在其中执行的任何命令,都能达到nohup的效果,这在有多个命令需要在后台连续执行的时候比较方便:

$ screen -dmS screen_test $ screen -list There is a screen on: 27963.screen_test (Detached) 1 Socket in /tmp/uscreens/S-jiangfeng. $ screen -r screen_test

㈨ linux shell 问题2

##1.控制执行时间间隔:使用sleep:
echo hello
sleep 10s #等10秒
echo hello
sleep 10m #等10分钟
echo hello
sleep 10h #等10hour
echo hello
sleep 10d #等10days

##2.控制执行时间点:使用crontab

Step 1:
使用命令crontab -e编辑一个定时执行的任务或在/var/spool/cron/crontabs目录下新建一个与自己用户名相同的任务.
即:
#每隔一分钟执行一次后台程序tmpmail
* * * * * /home/milch/tmpmail

顺便提一下crontab中的命令格式:
第一个 * 表示分钟 (0-59),
第二个 * 表示小时 (0-23),
第三个 * 表示月份中的某一天 (1-31),
第四个 * 表示一年中的某一月 (1-12),
第五个 * 表示一周中的星期几 (0-6 with 0=Sunday).

实例说明
# crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.3672 installed on Thu Jan 1 15:55:18 2004)
# (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $)
0 0-23/6 * * * /usr/bin/webalizer
30 3 * * * /root/fbin/bak-web
#

先前曾提到,crontab 的格式分成六个部分,前五个是时间参数。在上例中你会发现除了数字与英文名称,有使用到符号"*",这个符号代表每一单位的意思,譬如 30 3 * * * 既代表 30分 3点 每日 每月 星期的每天。

时间的指定,可以是单一的数字,或几个数字用逗号来连接。看下例

30 3,12 * * * /root/fbin/bak-web
其中的第二项为 3,12,这代表 3 以及 12 小时的意思。再来看下例

30 */6 * * * /root/fbin/bak-web
我把第二项改成 */6 这代表每 6 小时,也相当于 6,12,18,24 的作用。此外还有一个区段的做法

30 8-18/2 * * * /root/fbin/bak-web
我把第二项改成 8-18/2 这代表在 8 小时到 18 小时之间每 2 小时,也相当于 8,10,12,14,16,18 的作用。

热点内容
云表服务器安装导致电脑崩溃 发布:2024-05-07 15:58:35 浏览:524
ftp是什么检测器 发布:2024-05-07 15:37:59 浏览:403
重庆电信服务器租用教学云主机 发布:2024-05-07 15:28:05 浏览:73
python声明对象 发布:2024-05-07 15:28:03 浏览:128
存储过程的应用场景 发布:2024-05-07 15:12:16 浏览:613
车内配置怎么看 发布:2024-05-07 15:11:39 浏览:209
outlook已发送文件夹 发布:2024-05-07 14:08:13 浏览:31
佛系源码 发布:2024-05-07 14:04:03 浏览:674
php蚂蚁 发布:2024-05-07 13:49:22 浏览:401
phpfpmpid 发布:2024-05-07 13:44:29 浏览:521