【问题标题】:How-to check if Linux shell script is executed by a cronjob?如何检查 Linux shell 脚本是否由 cronjob 执行?
【发布时间】:2016-01-26 02:10:14
【问题描述】:

是否可以识别 Linux shell 脚本是由用户执行还是由 cronjob 执行?

如果是,我如何识别/检查 shell 脚本是否由 cronjob 执行?

我想在我的脚本中实现一个功能,它返回一些其他消息,就好像它是由用户执行的一样。比如这样:

    if [[ "$type" == "cron" ]]; then
        echo "This was executed by a cronjob. It's an automated task.";
    else
        USERNAME="$(whoami)"
        echo "This was executed by a user. Hi ${USERNAME}, how are you?";
    fi

【问题讨论】:

标签: shell cron cron-task


【解决方案1】:

一种选择是测试脚本是否附加到 tty。

#!/bin/sh

if [ -t 0 ]; then
   echo "I'm on a TTY, this is interactive."
else
   logger "My output may get emailed, or may not. Let's log things instead."
fi

请注意,at(1) 触发的作业也可以在没有 tty 的情况下运行,但不是专门由 cron 执行的。

另请注意,这是 POSIX,而不是 Linux-(或 bash-)特定的。

【讨论】:

  • 谢谢,似乎是解决方案。我总是忘记,在哪里可以找到可用的“if”测试参数列表,例如 -n、-x、-f 以及您使用的 -t。我在哪里可以找到这份清单?我想读一下,“-t”到底是什么意思。 POSIX 意味着,它适用于每个 Linux 发行版,对吧?
  • @user2966991 在这种情况下,POSIX 意味着它应该与任何符合 POSIX 的 shell 一起工作。这样的 shell 也可以在 Windows 上找到,从技术上讲,你可以拥有一个没有 POSIX shell 的 Linux 发行版。
  • 太好了,谢谢!对于后代,我应该添加到 Alois 的评论中,1p 手册部分不是通用的,在我使用的系统(FreeBSD、OSX 和 Ubuntu)上,man 1 test 甚至只是 man test 会告诉你可以测试的东西的列表。由于您正在运行 Linux,因此您很可能也有 bash 可用。如果是这样,您可以man bash 并搜索“条件表达式”部分以查看 bash 使用[[ 条件命令提供的扩展测试符号。 (剧透:bash 还提供-t。)
猜你喜欢
  • 2016-11-09
  • 2012-11-14
  • 2013-05-29
  • 1970-01-01
  • 2017-03-21
  • 2018-08-05
  • 2014-03-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多