分页: 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
谢谢 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 的运行环境是相同的,都不在用户的会话里边。