crontab调用脚本的环境变量怎么设置

sh/bash/dash/ksh/zsh等Shell脚本
anth
帖子: 172
注册时间: 2010-11-09 3:06

crontab调用脚本的环境变量怎么设置

#1

帖子 anth » 2021-09-24 16:01

最近打算监控温度和电量 报警脚本已经写好了 可以正常运行 但是到了定时任务里面环境变量出错了

我有一个代码文件public.myname提供各种功能 这里面有一个sensors.nvme函数监管硬盘温度并调用octave进行运算和报警 那么脚本的写法就是

#! /bin/bash

. /pwd/public*
sensors.nvme

然后发现crontab无法识别这个环境变量
头像
astolia
论坛版主
帖子: 6454
注册时间: 2008-09-18 13:11

Re: crontab调用脚本的环境变量怎么设置

#2

帖子 astolia » 2021-09-24 16:17

anth 写了: 2021-09-24 16:01 然后发现crontab无法识别这个环境变量
没看太懂。检查过cron的报错信息了吗?

如果/pwd/public*依赖某些环境变量,调用脚本时就要先设置 aaa=bbb ccc=ddd /path/to/your/script或在脚本里设置
特别是如果/pwd/public*里面如果调用了外部程序,一定记得把路径写全,cron运行时的PATH变量只包含/usr/bin和/bin
头像
sunfish
帖子: 989
注册时间: 2008-05-03 1:53

Re: crontab调用脚本的环境变量怎么设置

#3

帖子 sunfish » 2021-09-24 18:16

写脚本,推荐使用绝对路径,尽量不要使用相对路径
docker && kubernetes
anth
帖子: 172
注册时间: 2010-11-09 3:06

Re: crontab调用脚本的环境变量怎么设置

#4

帖子 anth » 2021-09-24 19:57

报错信息是这样的 好像crontab和shell不太一样
附件
image.jpg
头像
lilydjwg
论坛版主
帖子: 4250
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: crontab调用脚本的环境变量怎么设置

#5

帖子 lilydjwg » 2021-09-24 20:05

你提供的信息太破碎不全了。

从仅有的信息来看,有以下问题:

1. cron 跑任务时使用的是 /bin/sh,不是 bash。sh 支持的语法要少很多
2. 我不确定你的 . / 是真的 . / 还是你想打 ./ 但是不小心多了一个空格。如果是 . / 那么是由当前 shell(sh)去执行脚本,否则是执行文件,由 shebang(#!)指定用于运行脚本的解释器
3. 不知道你说的「环境变量」是什么、在哪里。建议重新描述问题
anth
帖子: 172
注册时间: 2010-11-09 3:06

Re: crontab调用脚本的环境变量怎么设置

#6

帖子 anth » 2021-09-24 20:28

原来是/bin/sh的差别 我对sh很不熟悉 只会bash 代码量很大 六百多行 重新规范很麻烦 能直接指定crontab用bash吗
anth
帖子: 172
注册时间: 2010-11-09 3:06

Re: crontab调用脚本的环境变量怎么设置

#7

帖子 anth » 2021-09-24 20:29

补充 . 后面空格没有错 就是source命令
anth
帖子: 172
注册时间: 2010-11-09 3:06

Re: crontab调用脚本的环境变量怎么设置

#8

帖子 anth » 2021-09-24 20:30

如果 直接./script是不是可以直接在脚本里面指定bash运行?吃饭后我去试一下
头像
lilydjwg
论坛版主
帖子: 4250
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: crontab调用脚本的环境变量怎么设置

#9

帖子 lilydjwg » 2021-09-24 20:45

source 那就是当前 shell 跑了。
你的脚本有写 shebang,你再给执行权限(chmod +x xxx),就可以指定路径来执行了。
anth
帖子: 172
注册时间: 2010-11-09 3:06

Re: crontab调用脚本的环境变量怎么设置

#10

帖子 anth » 2021-09-24 23:52

卡在图形设置了
附件
image.jpg
头像
lilydjwg
论坛版主
帖子: 4250
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: crontab调用脚本的环境变量怎么设置

#11

帖子 lilydjwg » 2021-09-25 0:15

你需要 export 来导出给子进程使用:

export DISPLAY=:0.0
anth
帖子: 172
注册时间: 2010-11-09 3:06

Re: crontab调用脚本的环境变量怎么设置

#12

帖子 anth » 2021-09-25 7:29

image.jpg
谢谢 crontab运行了 但是调用了mplayer的子进程自动关闭 所以只有文字记录 没有警报声音
附件
image.jpg
头像
lilydjwg
论坛版主
帖子: 4250
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: crontab调用脚本的环境变量怎么设置

#13

帖子 lilydjwg » 2021-09-25 10:19

你在 cron 里干嘛了啊……看起来你用用户级的 systemd.timer 会更方便一些。
anth
帖子: 172
注册时间: 2010-11-09 3:06

Re: crontab调用脚本的环境变量怎么设置

#14

帖子 anth » 2021-09-25 11:34

再一次卡在了x11设置 我在想啊 我需要定时功能crontab有 我需要调用mplayer crontab不可以 atd.service可以 可不可以crontab触发at命令调用mplayer

echo cmd l at now嘛
附件
image.jpg
头像
lilydjwg
论坛版主
帖子: 4250
注册时间: 2009-04-11 23:46
系统: Arch Linux
联系:

Re: crontab调用脚本的环境变量怎么设置

#15

帖子 lilydjwg » 2021-09-25 12:13

crond 和 atd 的运行环境是相同的,都不在用户的会话里边。
回复