當前位置:首頁 » 操作系統 » 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-04-27 04:04:45 瀏覽:652
天津智慧網關伺服器雲伺服器 發布:2024-04-27 03:56:51 瀏覽:422
移門製作下料尺寸演算法 發布:2024-04-27 03:15:02 瀏覽:641
c語言5常量 發布:2024-04-27 02:38:49 瀏覽:991
源碼怎麼搭建 發布:2024-04-27 02:33:44 瀏覽:97
java獲取參數 發布:2024-04-27 02:22:21 瀏覽:501
unixlinuxwindows 發布:2024-04-27 02:10:55 瀏覽:445
nginx禁止ip訪問網站 發布:2024-04-27 02:05:43 瀏覽:845
webrtc伺服器搭建哪家價格低 發布:2024-04-27 01:30:08 瀏覽:141
oracle資料庫無法啟動 發布:2024-04-27 01:29:20 瀏覽:613