关键词:
【中文标题】如何检查 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服务器,然后停止/... 查看详情