我使用的是EC2实例,crontab和Slack清洁器来删除超过48小时的所有松弛消息。为此,我创建了Delete_slack.sh(我已删除了我的Slack API令牌)
for CHANNEL in random general
do
slack-cleaner --token <MY TOKEN> --message --channel $CHANNEL --user "*" --before $(date -d '48 hour ago' "+%Y%m%d") --perform
done
然后,我创建了一个克朗塔布线以每分钟运行它(一旦它起作用,我将每天更改一次时间),然后将结果吐出到日志文件中:
* * * * * /home/ubuntu/delete_slack/delete_slack.sh >> /var/log/delete_slack.log 2>&1
要测试,我在外壳中运行了sh /home/ubuntu/delete_slack/delete_slack.sh >> /var/log/delete_slack.log 2>&1
,并且可以正常运行。但是,当我让crontab运行时,我会在日志文件中出现错误:
/home/ubuntu/delete_slack/delete_slack.sh: 3: /home/ubuntu/delete_slack/delete_slack.sh: slack-cleaner: not found
有什么想法吗?我整个下午都在猛击我的头。
听起来像您通过cron获得的路径,并且通过登录的路径不同。
要么在脚本中设置路径,要么使用绝对路径到slack-cleaner
该路径告诉外壳哪些目录要搜索可执行文件(包括脚本)。您可以echo $PATH
将您的路径与一个Cron提供的路径进行比较,并确认这是问题。
如果使用绝对路径起作用,那是最简单的,但是如果slack-cleaner
使用其他EXEX本身,则设置路径可能更好。
如果要使用"修改路径"方法,则需要将正确的路径附加到现有路径,而不是完全覆盖它。即export PATH=$PATH:/path/to/slack-cleaner-dir
。您始终可以使用which slack-cleaner
查找正确的路径。注意:您希望没有附加" Slack-cleaner"的目录到末尾。
始终在Crons中使用完整的路径,您将节省很多时间。如果您不喜欢export PATH=...
,则只需使用/path/to/slack-cleaner-dir
。
在运行命令之前,请加载您的配置文件,与从外壳启动时处于完全相同的情况:
* * * * * . ~/.profile;/home/ubuntu/delete_slack/delete_slack.sh >> /var/log/delete_slack.log 2>&1
我读到您有点陌生,这里只是有关个人资料的更多解释:当您与用户在Shell中连接时,该配置文件是自动加载的文件。该文件隐藏在您的主目录中,要查看,您可以启动:
ls -la ~
如果您在bash
中,则文件将命名为.bash_profile
,如果您在shell
或ksh
中,则将命名为.profile
希望它能有所帮助!