从什么上下文执行 cron 任务?

Joh*_*ohn 6 bash cron crontab redhat-enterprise-linux

我是在彻底摧毁 Linux 机器后问这个问题的。让我给你一些背景,让你知道我来自哪里。

我目前有(嗯……确实有)一个运行 Apache 的 RedHat Linux 机器,并添加了 Phusion 乘客,用于在 Apache 下运行 Ruby 应用程序。该应用程序作为一项服务,定期向辛辛那提地区的信息亭提供缓存文件。Web 应用程序运行良好,剩下的唯一部分是设置一个 cron 任务来检索需要缓存的所有信息,并将其打包到几个不同的更新包中以提供给自助服务终端。为了实现这一点,我编写了一个 Ruby 脚本来处理数据的获取和打包。为了设置 cron 任务,我只使用了内置的 crontab。脚本如下所示:

#!/bin/bash

cd ../lib
ruby pdf_cache.rb
ruby pdf_prepare.rb
ruby rss_cache.rb
ruby nightly-pack.rb 
cd ..
chown -R www.www *
Run Code Online (Sandbox Code Playgroud)

该脚本位于 cron 文件夹中,目录结构如下所示:

.
|-- cron
|-- feeds
|-- lib
|   `-- trash
|-- logs
|-- nightly-packs
|-- pdf
|   `-- tank
|-- public
`-- tmp
Run Code Online (Sandbox Code Playgroud)

crontab -e按照root以下内容运行:

0 3 * * * /usr/local/apache2/ruby_projects/kiosk/cron/schedule_job
Run Code Online (Sandbox Code Playgroud)

应该每天凌晨 3 点执行脚本。安排这个 cron 任务的第二天,我得到了一个非常不幸的惊喜。cron 任务是在 root 中执行的,我假设大多数命令都失败了,除了chmod -R www.www *将系统中所有内容的所有权更改为www用户之外。

我的问题是;实现 cron-task 的正确方法是什么,cron-task 是从什么上下文运行的?我现在意识到我可能不应该在该root帐户下运行它,并且我不确定如何在该www帐户下运行它,因为该用户没有外壳并且您无法成功连接su到该www用户。

Tam*_*man 2

我打赌你可以只给用户一个 shell,只是限制远程访问它的能力及其权限。

Cron 任务在创建 Cron 任务的用户下运行,因此这就是它以root.