2014-10-03 30 views
2

運行我有這個腳本,我在網上找到從FIFO讀取,並將其導入到MySQL:使腳本只有在另外的實例沒有運行

# 
# Created by Tadghe Patrick Danu 
# 
#!/bin/bash 


if [ -e /tmp/mysql.pipe ]; then 
while [ -e /tmp/mysql.pipe ] 
do 
mysql -u syslog --password=mypassword syslogdb < /tmp/mysql.pipe 
done 
else 
mkfifo /tmp/mysql.pipe 
fi 

我已安排此腳本的cron運行工作和它的工作,但是,每次運行時,它會產生一個新的實例,所以當我看着這些進程時,我看到一堆正在運行的腳本。我如何才能讓它只在沒有運行的情況下運行?我想一次只運行一個這樣的實例。

感謝,

+4

'cron'用於需要定期運行的事情,而不是需要運行一次並保持運行的事情。我認爲你想開始這個服務,而不是。 – chepner 2014-10-03 16:58:32

+1

在shell中執行互斥鎖的正確方法是使用'fuser',但保持服務運行的正確方式與「cron」完全沒有關係。 – 2014-10-03 23:31:34

回答

1

至少有兩個選項來做到這一點:

  1. 檢查腳本在開始時已經在運行,如果是,則退出並不會執行。
  2. 使用監控實用程序

https://mmonit.com/monit/documentation

用來檢查是否腳本工作,如果沒有再啓動的過程。但是如果它應該一直工作,那麼就把它作爲守護進程來運行。