分页: 1 / 2

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

发表于 : 2021-09-24 16:01
anth
最近打算监控温度和电量 报警脚本已经写好了 可以正常运行 但是到了定时任务里面环境变量出错了

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

#! /bin/bash

. /pwd/public*
sensors.nvme

然后发现crontab无法识别这个环境变量

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

发表于 : 2021-09-24 16:17
astolia
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

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

发表于 : 2021-09-24 18:16
sunfish
写脚本,推荐使用绝对路径,尽量不要使用相对路径

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

发表于 : 2021-09-24 19:57
anth
报错信息是这样的 好像crontab和shell不太一样

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

发表于 : 2021-09-24 20:05
lilydjwg
你提供的信息太破碎不全了。

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

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

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

发表于 : 2021-09-24 20:28
anth
原来是/bin/sh的差别 我对sh很不熟悉 只会bash 代码量很大 六百多行 重新规范很麻烦 能直接指定crontab用bash吗

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

发表于 : 2021-09-24 20:29
anth
补充 . 后面空格没有错 就是source命令

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

发表于 : 2021-09-24 20:30
anth
如果 直接./script是不是可以直接在脚本里面指定bash运行?吃饭后我去试一下

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

发表于 : 2021-09-24 20:45
lilydjwg
source 那就是当前 shell 跑了。
你的脚本有写 shebang,你再给执行权限(chmod +x xxx),就可以指定路径来执行了。

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

发表于 : 2021-09-24 23:52
anth
卡在图形设置了

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

发表于 : 2021-09-25 0:15
lilydjwg
你需要 export 来导出给子进程使用:

export DISPLAY=:0.0

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

发表于 : 2021-09-25 7:29
anth
image.jpg
谢谢 crontab运行了 但是调用了mplayer的子进程自动关闭 所以只有文字记录 没有警报声音

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

发表于 : 2021-09-25 10:19
lilydjwg
你在 cron 里干嘛了啊……看起来你用用户级的 systemd.timer 会更方便一些。

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

发表于 : 2021-09-25 11:34
anth
再一次卡在了x11设置 我在想啊 我需要定时功能crontab有 我需要调用mplayer crontab不可以 atd.service可以 可不可以crontab触发at命令调用mplayer

echo cmd l at now嘛

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

发表于 : 2021-09-25 12:13
lilydjwg
crond 和 atd 的运行环境是相同的,都不在用户的会话里边。