![](/img/trans.png)
[英]How can I write a script that iterates through a folder and creates new files/file content with given parameters
[英]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 文件。
一次只運行此腳本的一個實例也很重要。 但那是一匹不同顏色的馬。
謝謝閱讀。
簡要地:
檢測到文件后,將使用新文件作為其命令行變量來運行腳本。
同樣重要的是,一次只運行此腳本的一個實例。
通過以下方式在腳本中使用flock
: https : //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.