Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash脚本在shell中运行,给出;“未找到”;crontab中的错误_Bash_Amazon Ec2_Cron - Fatal编程技术网

Bash脚本在shell中运行,给出;“未找到”;crontab中的错误

Bash脚本在shell中运行,给出;“未找到”;crontab中的错误,bash,amazon-ec2,cron,Bash,Amazon Ec2,Cron,我正在使用EC2实例crontab和删除所有超过48小时的空闲消息。为此,我创建了delete_slack.sh(我已经删除了slack api令牌): 为了进行测试,我在shell中运行了sh/home/ubuntu/delete\u slack/delete\u slack.sh>/var/log/delete\u slack.log 2>&1,效果很好。但是,当我让crontab运行时,日志文件中出现了一个错误: * * * * * /home/ubuntu/delete_slack/de

我正在使用EC2实例crontab和删除所有超过48小时的空闲消息。为此,我创建了delete_slack.sh(我已经删除了slack api令牌):

为了进行测试,我在shell中运行了
sh/home/ubuntu/delete\u slack/delete\u slack.sh>/var/log/delete\u slack.log 2>&1
,效果很好。但是,当我让crontab运行时,日志文件中出现了一个错误:

* * * * * /home/ubuntu/delete_slack/delete_slack.sh >> /var/log/delete_slack.log 2>&1
/home/ubuntu/delete_slack/delete_slack.sh: 3: /home/ubuntu/delete_slack/delete_slack.sh: slack-cleaner: not found

有什么想法吗?整个下午我都在绞尽脑汁。

听起来你通过cron获得的路径和通过登录获得的路径是不同的

在脚本中设置路径,或使用绝对路径设置为
slack cleaner

该路径告诉shell搜索可执行文件(包括脚本)的目录。您可以
echo$PATH
将您的路径与cron给出的路径进行比较,并确认这就是问题所在

如果使用绝对路径有效,这是最简单的,但是如果
slackcleaner
本身使用其他exe,那么设置路径可能会更好


如果要使用“修改路径”方法,则需要将正确的路径附加到现有路径,而不是完全覆盖它。i、 e.
导出路径=$PATH:/PATH/to/slack cleaner dir
。您始终可以使用
哪个松弛清洁器
找到正确的路径。注意:您希望在末尾附加不带“slack cleaner”的目录。

始终在cron中使用完整路径,这样可以节省大量时间。
如果您不喜欢导出路径=…,则只需使用
/PATH/to/slack cleaner dir

只需在运行命令之前加载您的配置文件,使其处于与从shell启动命令完全相同的情况:

* * * * * . ~/.profile;/home/ubuntu/delete_slack/delete_slack.sh >> /var/log/delete_slack.log 2>&1
当我读到您对此有点陌生时,以下是关于该配置文件的更多解释: 配置文件是在shell中与用户连接时自动加载的文件。 文件隐藏在您的主目录中,要查看它,您可以启动:

ls -la ~
如果您在
bash
,文件将命名为
.bash\u profile
,如果您在
shell
ksh
中,文件将命名为
.profile


希望有帮助

很抱歉,我不熟悉这一点,您所说的“在脚本中设置路径”是什么意思?
export PATH=$PATH:/PATH/to/dir/of/slack cleaner
(很明显,您不希望slack cleaner在最后,只希望它所在的目录)-这告诉shell搜索可执行文件/脚本的目录。通过使用
$PATH:…
您将附加到现有路径。就是这样。非常感谢。原因是,
slackcleaner
安装在anaconda的环境中,但cron显然使用了不同的python环境,因此无法找到
slackcleaner
。活到老学到老。你的意思是这样的:
/home/anaconda3/slack cleaner--token--message--channel$channel--user“*”--before$(date-d‘48小时前’+%Y%m%d”)--执行
?正确。如果推荐行中提到任何其他文件,请确保该文件也具有完整路径。即使$CHANNEL表示一个文件,也要将完整路径添加到变量内容中。你真的可以节省很多时间。
ls -la ~