web-dev-qa-db-ja.com

特定のユーザーとしてcronジョブを実行する方法

自分のマシンで特定のユーザーとしてcronジョブを実行したいです。 cronジョブを実行するユーザーをどのように指定できますか?.

Cronジョブはサーバー上(Ubuntu 10.0.4上で実行中)で実行されます。 「ユーザー」は、特定のサーバー側タスクを実行するために特別に作成されたユーザーです。これらの「ユーザー」には、以下の共通点があります。

  • システムにログオンできない
  • 特定のフォルダ/ファイルへのアクセスが制限されている
65
morpheous

単にログインしてそのユーザーのcrontabに追加することができないと仮定して、ファイルを/etc/cron.dに入れます。通常のcronjobとしてフォーマットされるべきですが、追加のフィールドがあります。実行するコマンドの前とタイミングの後に、ユーザーを置きます。あなたのシステムにはすでに例が見つかるはずです。

例:

#<timing>   <user> <command>
11 * * * *  root   /usr/lib/command
76
Daenyth

Rootとして、user1のcronを編集します。

crontab -u user1 -e

次のようにしてコマンドを開始することもできます。

su user1 -c foo bar

しかし、多くの場合、スクリプトをrootとして起動すると、スクリプト自体のアクセスが減少します。

40
Eric Darchis

私は数週間これを探していました、そしてこれはついにうまくいきました...

あなたのスクリプトをuser1として作成します。

ssh [email protected]
nano hourly-event.sh

何らかのコマンドを入力

#!/bin/bash
echo "YAY it works" > /home/user1/yay.txt

実行可能にする

chmod 755 hourly-event.sh

user1のcrontabを編集します

Sudo crontab -u user1 -e

一番下にあなたのスクリプトを指す線を入れてください

# m h  dom mon dow   command
*   *   *   *   *    bash ./hourly-event.sh

exit - 変更を保存します(保存すると/ tmpディレクトリが表示されます...問題ありません)

分の変わり目を待つ

新しく作成したyay.txtを開きます。

nano /home/user1/yay.txt

あなたのナノウィンドウの一番下に「New File」と表示されている場合、最初の唯一の行として「YAY it works」でナノウィンドウを開いているはずです。

/ var/spool/cron/crontabs/user1でuser1の新規crontabエントリを確認することもできます。

平和

1
user220364

特に "rbenv"、 "nvm"を使用しているときなど、ユーザーに自分の環境をロードさせたい場合があります。

0 0 * * * source ~/.bash_profile && cd /opt/app/current && bundle exec Ruby ...

(ここでコマンドsource ~/.bash_profileはあなたにRubyまたはNode環境をロードします。