如何检查 Linux shell 脚本是不是由 cronjob 执行?

     2023-03-04     74

关键词:

【中文标题】如何检查 Linux shell 脚本是不是由 cronjob 执行?【英文标题】: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

【问题讨论】:

使用环境变量? * * * * * CRON_FIRED=true /path/to/myscript 但请注意,语法是 subject to the cron implementation,也可以简单地被愚弄。 【参考方案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 将是 pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html 或 man 1p test @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。)

如何在 shell 脚本中检查目录是不是存在? [复制]

】如何在shell脚本中检查目录是不是存在?[复制]【英文标题】:Howtocheckifadirectoryexist,withinashellscript?[duplicate]如何在shell脚本中检查目录是否存在?[复制]【发布时间】:2014-03-3017:50:54【问题描述】:在shell脚本中可以使用什么命... 查看详情

如何检查传递给 shell 脚本的参数是不是不是整数?

】如何检查传递给shell脚本的参数是不是不是整数?【英文标题】:HowcanIcheckwhetheranargumentpassedtoashellscriptisNOTaninteger?如何检查传递给shell脚本的参数是否不是整数?【发布时间】:2013-03-2215:20:11【问题描述】:我知道如何使用以... 查看详情

如何使用 shell 脚本检查 MySQL 数据库中是不是存在表?

】如何使用shell脚本检查MySQL数据库中是不是存在表?【英文标题】:HowtocheckifatableexistsinaMySQLdatabaseusingshellscript?如何使用shell脚本检查MySQL数据库中是否存在表?【发布时间】:2017-12-0810:13:31【问题描述】:我正在尝试使用shell... 查看详情

如何在shell脚本中,判断一个基本命令执行是不是成功

1.连接到相应的Linux主机,进入Linux命令行状态,等待shell命令的输入。2.在Linux命令行下,输入shell命令:Telnet192.168.120.209。3.最后,按下回车键执行shell指令,此时会看到telnet并没有连接成功。注意事项附件:LINUX系统外壳原理作为... 查看详情

如何检查 Docker 是不是安装在 Unix shell 脚本中? [复制]

】如何检查Docker是不是安装在Unixshell脚本中?[复制]【英文标题】:HowtocheckifDockerisinstalledinaUnixshellscript?[duplicate]如何检查Docker是否安装在Unixshell脚本中?[复制]【发布时间】:2018-03-1610:53:21【问题描述】:如果安装了Docker(Ubuntu... 查看详情

如何在linux中检查目录是不是存在。? [复制]

】如何在linux中检查目录是不是存在。?[复制]【英文标题】:Howtocheckdirectoryexistornotinlinux.?[duplicate]如何在linux中检查目录是否存在。?[复制]【发布时间】:2012-02-0602:40:34【问题描述】:给定一个文件路径(例如/src/com/mot),我... 查看详情

检查 Bash shell 脚本中是不是存在输入参数

】检查Bashshell脚本中是不是存在输入参数【英文标题】:CheckexistenceofinputargumentinaBashshellscript检查Bashshell脚本中是否存在输入参数【发布时间】:2011-09-2220:48:51【问题描述】:我需要检查输入参数是否存在。我有以下脚本if["$1"-gt... 查看详情

如何在 Linux 中从 C 执行 shell 脚本?

】如何在Linux中从C执行shell脚本?【英文标题】:HowtoexecuteashellscriptfromCinLinux?【发布时间】:2011-04-1318:24:39【问题描述】:如何在Linux中从C语言执行shell脚本?【问题讨论】:【参考方案1】:这取决于您要对脚本(或您要运行的... 查看详情

检查命令的输出是不是包含 shell 脚本中的某个字符串

】检查命令的输出是不是包含shell脚本中的某个字符串【英文标题】:Checkingifoutputofacommandcontainsacertainstringinashellscript检查命令的输出是否包含shell脚本中的某个字符串【发布时间】:2013-05-3115:22:32【问题描述】:我正在编写一个... 查看详情

如何判断字符串是不是未在 Bash shell 脚本中定义

】如何判断字符串是不是未在Bashshell脚本中定义【英文标题】:HowtotellifastringisnotdefinedinaBashshellscript如何判断字符串是否未在Bashshell脚本中定义【发布时间】:2010-09-1817:13:02【问题描述】:如果我想检查空字符串,我会这样做[-z... 查看详情

linux系列教程(二十)——linux的shell概述以及如何执行脚本

  从这篇博客开始,我们将进入Linux的shell脚本的学习,这对于Linux学习爱好者而言是特别重要的一节,也是特别有意思的一节,shell脚本就像我们知道的Java,php类似的编程语言一样,通过shell脚本,我们能完成很多有意思的应... 查看详情

如何检查参数在shell中是不是有单个字符

】如何检查参数在shell中是不是有单个字符【英文标题】:Howtocheckifanargumenthasasinglecharacterinshell如何检查参数在shell中是否有单个字符【发布时间】:2012-11-0903:22:14【问题描述】:我正在尝试编写一个脚本来检查参数是否有单个... 查看详情

Linux shell脚本如何仅在表不存在的情况下创建Oracle表[重复]

】Linuxshell脚本如何仅在表不存在的情况下创建Oracle表[重复]【英文标题】:LinuxshellscripthowcanIcreateanOracletableonlyiftabledoesnotexist[duplicate]【发布时间】:2015-11-0223:27:47【问题描述】:我是Linux新手,我想检查Oracle中是否不存在一个表... 查看详情

linux内核模块中调用shell脚本

...现,写一个linux内核模块,模块加载的时候调用一个shell脚本。参考技术A内核模块是用C语言写的,如果你想开机启动脚本,可以将shell路径写在profile文件中追问不是,我是想在内核模块中调用我的脚本,不是开机启动的时候。 查看详情

如何检查环境变量是不是存在并获取其值? [复制]

】如何检查环境变量是不是存在并获取其值?[复制]【英文标题】:Howtocheckifanenvironmentvariableexistsandgetitsvalue?[duplicate]如何检查环境变量是否存在并获取其值?[复制]【发布时间】:2017-01-1019:26:55【问题描述】:我正在编写一个she... 查看详情

检查linux脚本中是不是存在文件[重复]

】检查linux脚本中是不是存在文件[重复]【英文标题】:Checkifafileexistsinalinuxscript[duplicate]检查linux脚本中是否存在文件[重复]【发布时间】:2013-12-0713:01:24【问题描述】:我制作了一个linux脚本,它接收一个目录路径作为第一个参... 查看详情

如何在 Linux shell 脚本中显示 nc 返回值?

】如何在Linuxshell脚本中显示nc返回值?【英文标题】:HowtodisplayncreturnvalueinLinuxshellscript?【发布时间】:2017-07-1115:55:15【问题描述】:我在我的Linux框中使用nc命令来检查端口是否正在监听;这会显示成功消息:nc-z192.168.0.29000这... 查看详情

如何使用 shell 脚本连接到 linux 服务器并停止/启动服务?

】如何使用shell脚本连接到linux服务器并停止/启动服务?【英文标题】:Howtoconnecttoalinuxserverandstop/startaserviceusingashellscript?【发布时间】:2017-11-1809:35:14【问题描述】:我想设置一个脚本,该脚本将连接到linux服务器,然后停止/... 查看详情