【问题标题】:Define a Increment variable in shell script that increments on every cronjob在 shell 脚本中定义一个增量变量,该变量在每个 cronjob 上递增
【发布时间】:2016-11-26 17:33:36
【问题描述】:

我在论坛上搜索了一个找不到。我们可以定义一个仅在每次运行 cronjob 时递增的变量吗?

例如:

我有一个每 5 分钟运行一次的脚本,所以我需要一个基于 cron 运行递增的变量

如果作业运行了 5 分钟并持续了几分钟。所以脚本执行了 6 次,所以我的计数器变量现在应该是 6

我期待在 bash/shell 中

如有重复问题,请见谅

试过了:

((count+1))

【问题讨论】:

  • 环境变量不起作用。使用文件。
  • 如果不关心计数器的实际值,只需从date +%s获取当前时间戳,然后除以300(5分钟内的秒数)即可。这将在每次运行时为您提供一个递增的值。如果您确实关心实际值,请减去一个常数值。否则,按照@thatotherguy 的建议,在每次运行时保存并重新加载文件

标签: bash shell unix cron


【解决方案1】:

你可以这样做:

  1. 创建两个脚本:counter.sh 和 increment_counter.sh
  2. 在您的 cron 作业中添加 increment_counter.sh 的执行
  3. . /path/to/counter.sh 添加到/etc/profile/etc/bash.bashrcwherever you need

counter.sh

declare -i COUNTER
COUNTER=1
export COUNTER

increment_counter.sh

#!/bin/bash
echo "COUNTER=\$COUNTER+1" >> /path/to/counter.sh

【讨论】:

    【解决方案2】:

    您在其中运行命令的 shell 已退出;它设置的任何变量都消失了。您不能为此目的使用变量。

    您需要的是某种永久性数据存储。这可能是数据库、远程网络服务或各种事物,但到目前为止,最简单的解决方案是将值存储在磁盘上某处的文件中。脚本启动时读入文件,然后写出增加的值。

    您应该考虑如果文件丢失该怎么办,如果同时运行多个脚本副本会发生什么,并确定这些情况是否是您关心的情况。如果是,则需要在脚本中分别添加适当的错误处理和锁定。

    【讨论】:

      【解决方案3】:

      这不是更好的解决方案吗?

      ...在 /tmp 下定义一个文件,例如:

      echo -n "." > $MyCounterFilename
      

      跟踪某事被调用的次数,在我的特定应用案例中:

      #!/bin/bash
      xterm [ Options ] -T "$(cat $MyCounterFilename | wc -c )" &
      echo -n "." > $MyCounterFilename
      

      因为我必须修改调用 xterm 的方式来实现我的目的,而且我已经发现如果同时打开其中的许多,如果通过其编号确切地知道每个运行的内容(无需循环 alt+),浪费的时间会更少通过标签和眼睛检查所有内容)。

      注意:/etc/profile,或者更好的 ~/.profile 或 ~/.bash_profile 只需要一个环境。定义的变量名称包含计数器文件的完整路径。

      无论如何,如果你不喜欢上面的想法,可以进行实验来确定 a) 自机器开机和系统启动以来所有 /etc/profile 执行的第一次。 2) /etc/profile 是否被执行,执行了多少次(例如每次我们打开一个 xterm?)。 ... 此后,对其他比 /etc 不太通用的家伙进行相同类型的测试。

      【讨论】:

        猜你喜欢
        • 2023-04-01
        • 1970-01-01
        • 2020-04-01
        • 2011-11-20
        • 1970-01-01
        • 1970-01-01
        • 2021-09-13
        • 2021-12-27
        相关资源
        最近更新 更多