我正在使用EC2实例,crontab和slack-cleaner删除超过48小时的所有Slack消息。为此,我创建了delete_slack.sh(我删除了我的松弛api令牌):
std::getline(map, fileID, ":");
然后我创建了一个crontab行来每分钟运行一次(一旦它工作,我会将时间更改为每天一次)并让cron将结果吐出到日志文件中:
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
为了测试,我在shell中运行了* * * * * /home/ubuntu/delete_slack/delete_slack.sh >> /var/log/delete_slack.log 2>&1
,它运行正常。但是,当我让crontab运行时,我在日志文件中出现错误:
sh /home/ubuntu/delete_slack/delete_slack.sh >> /var/log/delete_slack.log 2>&1
有什么想法吗?我整个下午一直在反对这一点。
答案 0 :(得分:3)
听起来像你通过cron获得的PATH,你通过登录获得的PATH是不同的。
在脚本中设置PATH或使用slack-cleaner
PATH告诉shell哪些目录要搜索可执行文件(包括脚本)。您可以echo $PATH
比较您的cron给出的路径,并确认这是问题。
如果使用绝对路径有效,这是最简单的,但如果slack-cleaner
本身使用其他exes,设置路径可能会更好。
如果你想去&#34;修改路径&#34;然后,您希望将正确的路径附加到现有PATH,而不是完全覆盖它。即export PATH=$PATH:/path/to/slack-cleaner-dir
。您始终可以使用which slack-cleaner
找出正确的路径。注意:您希望目录没有&#34;松弛清洁&#34;附在最后。
答案 1 :(得分:1)
总是在crons中使用完整路径,您将节省大量时间。
如果您不喜欢export PATH=...
,请改用/path/to/slack-cleaner-dir
。
答案 2 :(得分:1)
在运行命令之前加载您的配置文件,使其处于与从shell启动它时完全相同的情况:
* * * * * . ~/.profile;/home/ubuntu/delete_slack/delete_slack.sh >> /var/log/delete_slack.log 2>&1
当我读到您对此有点新的时候,这里只是对该配置文件的一些解释: 当您在shell中与用户连接时,配置文件是自动加载的文件。 该文件隐藏在您的主目录中,要查看它,您可以启动:
ls -la ~
如果您在bash
,则该文件将被命名为.bash_profile
,如果您在shell
或ksh
,则会将其命名为.profile
}
希望它有所帮助!