A. linux 中實現延遲45分鍾後執行命令,寫了一段c程序,實現延遲,接下來,該如何執行命令呢,也就是shell
1、system(執行shell 命令)
相關函數 fork,execve,waitpid,popen
表頭文件 #include<stdlib.h>
定義函數 int system(const char * string);
函數說明 system()會調用fork()產生子進程,由子進程來調用/bin/sh-c
string來執行參數string字元串所代表的命令,此命令執行完後隨
即返回原調用的進程。在調用system()期間SIGCHLD 信號會被暫時
擱置,SIGINT和SIGQUIT 信號則會被忽略。
返回值 如果system()在調用/bin/sh時失敗則返回127,其他失敗原因返回-
1。若參數string為空指針(NULL),則返回非零值。如果system()調
用成功則最後會返回執行shell命令後的返回值,但是此返回值也有
可能為system()調用/bin/sh失敗所返回的127,因此最好能再檢查
errno 來確認執行成功。
附加說明 在編寫具有SUID/SGID許可權的程序時請勿使用system(),system()會
繼承環境變數,通過環境變數可能會造成系統安全的問題。
例如:
#include<stdlib.h>
main()
{
system(「ls -al /etc/passwd /etc/shadow」); //換成./test.sh 可執行相關腳本
}
當然也可以用管道或exec函數族來調用shell
B. linux中怎樣讓shell腳本等待其他腳本文件執行完
在shell里寫一個條件判斷語句,去查詢上一條命令執行的結果,如果執行成功則執行下面的語句。
如是上面的命令是一個簡單的命令,就用sleep來控制。這都是常用方法
C. 在shell腳本中,比如執行一個命令,在等待3秒後,沒有這個命令的結果,就執行下一條,這個怎麼寫呀
#!/bin/bash
func()
{
wget...
touchfinished
}
func&
sleep3000
if[-ffinished]
then
echo"finished"
else
echo"notfinished"
fi
rm-ffinished
D. shell腳本跑72小時後結束
開始有個時間
然後不斷循環測試重啟
重啟後記錄時間,和開始時間比,超過72小時就kill 自己
也可以寫個計劃任務,72小時後,殺掉這個shell進程
E. 在Linux下資料庫中怎樣設定一個時間自動執行一個shell腳本文件,例如:auto.sh
Linux資料庫應該是無法執行shell腳本的,應該是Linux系統下執行shell腳本吧。
直接在linux下輸入crontab -e,然後配置一段代碼如下:
01 8 * * * /bin/bash path(你的文件目錄)/auto.sh
前五位沒記錯的話應該分別對應分鍾,小時,日,月,星期。
如果你希望保存日誌的話可以用輸出重定向,如下:
01 8 * * * /bin/bash path(你的文件目錄)/auto.sh > /tmp/auto.log 2 > &1 &
這樣如果文件執行錯誤的話,你可以去/tmp目錄下去查詢錯誤日誌,便於程序的優化。
關於crontab的詳細介紹給你個傳送門:
http://www.jb51.net/LINUXjishu/19905.html
我也是菜鳥,共同學習共同進步,祝好。
F. linux中怎樣讓shell腳本等待其他腳本文件執行完
第三種方法主要用於在腳本中切換用戶su、切換目錄cd等命令。
source
和
.
命令是相同的。
你可以搜索
source
補充,如何查看腳本運行是否開啟了bash子進程
vim
file.sh
寫入
#!/bin/bash
#echo
$$命令會輸出bash進程ID
echo
$$
保存並賦予可執行許可權chmod
u+x
file.sh
在你的shell中輸入,echo
$$
屏幕輸出4176
./file.sh
屏幕輸出3600
bash
file.sh
屏幕輸出3984
source
file.sh
屏幕輸出4176
和
你直接在shell中輸出的一樣,說明是在同一個bash進程
G. 如何解決Shell腳本執行超時的問題
執行超時那就說明環境出問題,比如網路環境不通了,腳本計算任務過多。那隻能是有問題查問題了。你也可以對腳本的執行加上監控,比如使用timeout命令限制執行時間,如到達一定的時間後沒執行完,然後就發消息通知你。對於超時的任務可以嘗試多次等,或者改進代碼。
H. shell中如何實現隔段時間執行下一個命令
使用sleep命令,比如
echo "1" #執行第一個命令
sleep 2 #sleep 2秒
echo "2" #執行第二個命令
I. 求助一個shell腳本定時執行的問題
每分鍾執行一次的話是不需要加上"/1」的,並且echo輸出的值也不會在當前窗口輸出的。你想測試的話你可以把那個命令換成sleep 100,時間到了之後你再執行 ps aux |grep sleep 就能判斷出有沒有執行了。
[root@localhost aa]# ps aux |grep sleep
root 17142 0.0 0.1 1668 388 ? Ss 03:52 0:00 sleep 100
root 17149 0.0 0.2 5028 660 pts/2 R+ 03:53 0:00 grep sleep