更新时间:2023-11-09 12:04:40
activate
和 deactivate
可能是位于 $PATH
条目某处的脚本代码>变量指向.通常,为一个用户在本地安装的软件会将语句添加到您的 .profile
文件或 .bashrc
中,以扩展您的 $PATH
变量,以便您可以使用不使用完整路径的软件脚本.
虽然您的 bash 会自动加载 .profile
和 .bashrc
,但 CRON 不会这样做.对此,至少有两种解决方案.
要么在 CRON 作业执行的脚本中使用完整路径,如下所示:
#!/bin/bashsource/path/to/activate manage_oam_userspython $HOME/path/to/script/send.py源/路径/到/停用
也使用 $HOME
而不是 ~
.您可以在 shell 中使用 which activate
和 which activate
找出完整路径.
.profile
或 .bashrc
或者,您可以获取 .profile
(或 .bashrc
;您必须查看哪个文件扩展了您的 $PATH
变量anaconda 目录)在您的 CRON 选项卡中:
30 * * * * source $HOME/.profile;源/path/to/script/send.bash
source 是一个 Unix 命令,用于评估命令后面的文件,作为在当前上下文中执行的命令列表.
source
命令的常用别名是单点 (./path/to/script
).
相关但更多通用问题可以在 UNIX 和 Linux Stack Exchange 上找到.
I'm trying to run the following bash script which runs a Python program after activating a conda environment.
send.bash
#!/bin/bash
source activate manage_oam_users
python ~/path/to/script/send.py
source deactivate
crontab
30 * * * * source /path/to/script/send.bash
I get the following error from cron, although running source send.bash
works perfectly. I've also tried using bash send.bash
which works fine when run manually, but results in the same error when run from cron.
/path/to/script/send.bash: line 2: activate: No such file or directory
activate
and deactivate
are probably scripts located somewhere an entry in your $PATH
variable points to. Usually, software installed locally for one user adds statements to your .profile
file or .bashrc
that extend your $PATH
variable so that you can use the software's scripts without using full paths.
While your bash loads .profile
and .bashrc
automatically, CRON won't do that. There are at least two solutions for this.
Either you use full paths in the script executed by your CRON job, like this:
#!/bin/bash
source /path/to/activate manage_oam_users
python $HOME/path/to/script/send.py
source /path/to/deactivate
Also use $HOME
instead of ~
. You can find out the full paths using which activate
and which deactivate
in your shell.
.profile
or .bashrc
Alternatively you can source your .profile
(or .bashrc
; you will have to look which file extends your $PATH
variable with the anaconda directories) in your CRON tab:
30 * * * * source $HOME/.profile; source /path/to/script/send.bash
source is a Unix command that evaluates the file following the command, as a list of commands, executed in the current context.
– from Wikipedia, the something something great encyclopaedia
A commonly used alias for the source
command is a single dot (. /path/to/script
).
A related, but more generic question can be found on the UNIX and Linux Stack Exchange.