首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在工作中遇到麻烦

在工作中遇到麻烦
EN

Stack Overflow用户
提问于 2016-01-26 16:50:01
回答 2查看 4.3K关注 0票数 13

在亚历克斯回答我的步骤之后:

创建外壳代码

代码语言:javascript
复制
root@ip[/]# touch mylog.sh
root@ip[/]# nano mylog.sh

复制mylog.sh中的代码

代码语言:javascript
复制
#!/bin/bash
echo "File $1 created." >> /mylog.log

权限

代码语言:javascript
复制
root@ip[/]# chmod +x mylog.sh

创建日志文件

代码语言:javascript
复制
root@ip[/]# touch mylog.log 

开冰台

代码语言:javascript
复制
incrontab -e

输入新命令

代码语言:javascript
复制
/test/ IN_CREATE mylog.sh $@$#

重新加载incron -创建一个新文件-检查日志文件

代码语言:javascript
复制
root@ip[/]# incrontab --reload
requesting table reload for user 'root'...
request done

root@ip[/]# cd test
root@ip[/test]# touch newfile.txt

root@ip[/test]# cd /
root@ip[/]# nano mylog.log

但仍然是空日志文件..。我漏掉了什么吗?

最后,使用full path调用shell脚本完成了这样的任务:

代码语言:javascript
复制
/test/ IN_CREATE /mylog.sh $@$#
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-02-03 10:51:28

您通常可以在/var/log/messages中找到incron日志。

如果要将事件记录到特定文件,可以使用:

代码语言:javascript
复制
/test/ IN_CREATE mylog.sh $@$#

其中mylog.sh是一个shell脚本,它处理日志记录。

代码语言:javascript
复制
#!/bin/bash
echo "File $1 created." >> /home/myuser/filescreated.log

不要忘记通过chmod +x mylog.sh对这个shell脚本授予执行权限。

说明:一旦开始为正在调用的命令使用参数,就必须将其全部放入shell脚本中。因为incron不将参数传递给您的命令,而是将其解释为自己的参数。

不要忘记调用incrontab -在更改incrontab后重新加载。

另一个例子

incrontab -e

代码语言:javascript
复制
/text/ IN_CREATE /home/myuser/mylog.sh $@ $#

mylog.sh

代码语言:javascript
复制
#!/bin/bash
echo "$(date) File $2 in $1 created." >> /home/myuser/log.txt
票数 3
EN

Stack Overflow用户

发布于 2022-11-06 22:31:12

按照Alexander的Baltasar answer,您还可以拥有一个执行重定向的脚本,并使您的结束脚本不受这种逻辑的影响。

低于std_wrapper.sh

代码语言:javascript
复制
#!/bin/bash

### FLAGS
set -Eeuo pipefail

### INIT SCRIPT
SCRIPT_FULLNAME=$(basename -- ${0})
usage="usage: ${SCRIPT_FULLNAME} log_file target_script target_file watched_dir event"


## ARGUMENTS
log_file="${1}"
target_script="${2}"
target_file="${3}"
watched_dir="${4}"
event="${5}"

### MAIN
if [ -z "${log_file}" ] || [ -z "${target_script}" ] || [ -z "${target_file}" ]; then
  echo "${usage}" >&2
  exit 1
fi

# do the actual call and apply the redirection:
${target_script} "${target_file}" "${watched_dir}" "${event}" >> "${log_file}" 2>&1
  • 确保脚本可以运行($ chmod 770 std_wrapper.sh):

在您的incrontab ($ incrontab -e)中:

代码语言:javascript
复制
/test/ IN_CREATE /path/std_wrapper.sh /path/log/test.create /path/actual_script.sh $# $@ $%

actual_script.sh看起来可能是这样的:

代码语言:javascript
复制
#!/bin/bash

### FLAGS
set -Eeuo pipefail

### Input Parameters
filename="${1}"
watched_dir="${2}"
event="${3}"
full_filename="${watched_dir}${filename}"

### Main
dt="$(date '+%d/%m/%YT%H:%M:%S')"
echo "$dt (event:) $event (file:) $filename (dir:) $watched_dir <----- going to process ----->"
echo "sleeping 10 seconds..."
sleep 10
dt="$(date '+%d/%m/%YT%H:%M:%S')"
echo "$dt (event:) $event (full_filename:) $full_filename <----- returning from sleep -->"

连续创建两个文件(不到10秒)

代码语言:javascript
复制
$ touch /test/new-file && sleep 5 && touch /test/another-file

会创建这样的日志:

代码语言:javascript
复制
$ cat /path/log/test.create
07/11/2022T08:00:50 (event:) IN_CREATE (file:) new-file (dir:) /test/ <----- going to process ----->
sleeping 10 seconds...
07/11/2022T08:00:55 (event:) IN_CREATE (file:) another-file (dir:) /test/ <----- going to process ----->
sleeping 10 seconds...
07/11/2022T08:01:10 (event:) IN_CREATE (full_filename:) /test/new-file <----- returning from sleep -->
07/11/2022T08:01:15 (event:) IN_CREATE (full_filename:) /test/another-file <----- returning from sleep -->
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35019277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档