簡體   English   中英

如何查看文件夾中的新文件,然后將新文件作為 $1 執行腳本

[英]how to watch a folder for a new file and then execute a script with the new file as $1

我有一個 Windows 應用程序將創建一個 .xml 文件並將其上傳到我的 Linux 服務器上的一個文件夾中。 我需要一種方法來監視這個新文件,它的文件名類似於“004job.xml”、“012job.xml”等。 文件名每次都不一樣。 檢測到文件后,將使用新文件作為其命令行變量運行腳本。 像這樣“/home/project/scripts/renderjob.sh /home/project/jobs/012job.xml”。 腳本會根據.xml 文件的內容做一些動作,最后一個動作是刪除.xml 文件。

一次只運行此腳本的一個實例也很重要。 但那是一匹不同顏色的馬。

謝謝閱讀。

簡要地:

檢測到文件后,將使用新文件作為其命令行變量來運行腳本。

https://unix.stackexchange.com/questions/273556/when-a-particular-file-arrives-then-execute-a-procedure-using-shell-script/273563#273563

同樣重要的是,一次只運行此腳本的一個實例。

通過以下方式在腳本中使用flockhttps : //unix.stackexchange.com/questions/274498/performing-atomic-write-operations-in-a-file-in-bash/274499#274499 在群內插入監視文件的內容:

(
    flock -s 200

    res=$(inotifywait $DIR)
    # other actions

) 200>/var/lock/myscriptlock 

您可以使用 Inotify-command、此處提供的 Docker 和此處Github 項目

此工具允許您查看文件夾中的新文件,並在檢測到新文件或文件的新版本時啟動自定義命令/腳本。

sudo docker run --name=inotify-command -d \ 
-v /etc/localtime:/etc/localtime \
-v /config/dir/path:/config:rw \
-v /dir/path:/dir1 \
martinbouillaud/inotify-comman:latest

選項IGNORE_EVENTS_WHILE_COMMAND_IS_RUNNING=0允許您一次只運行腳本的一個實例。

在你的情況下,你可以做類似的事情:

sudo docker run --name=inotify-command -d \ 
-v /etc/localtime:/etc/localtime \
-v /home/project/scripts:/scripts:rw \
-v /home/project/jobs:/jobs:rw \
-v /home/project/config:/config \
martinbouillaud/inotify-comman:latest

然后,創建一個文件job.conf並將其放入您的配置文件夾中:

WATCH_DIR=/jobs
SETTLE_DURATION=5
MAX_WAIT_TIME=30
MIN_PERIOD=30
COMMAND="/scripts/renderjob.sh"
# Need to run as root to have the authority to fix the permissions
USER_ID=0
GROUP_ID=0
UMASK=0000
# This is important because chmod/chown will change files in the monitored directory
IGNORE_EVENTS_WHILE_COMMAND_IS_RUNNING=1
USE_POLLING=no

最后,您需要調整您的 renderjob.sh 以在 Docker 中使用路徑 /jobs 和 /scripts 工作...

希望它能幫助你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM