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


66

私のマシンで特定のユーザーとしてcronジョブを実行したいと思います。cronジョブを実行するユーザーを指定するにはどうすればよいですか?

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

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

回答:


79

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

例:

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

これが正解だと思います。いくつかの例を探して、さらに調査する必要があります。
モーフィアス

2
プラス私から1つ、これはあなたが望むものを行うための最良の方法です。/ etc / crontabファイルをより正確に見ると、timeテンプレートの後、コマンドの前に「root」が書き込まれていることがわかります。これは、「root」がこれらのコマンドを実行することを意味します。独自のスケジュールを追加し、「root」の代わりに任意のユーザーを使用します。また、ユーザーごとのcrontab(Eric Dが提案)を使用すると、システム全体のcrontab(/ etc / crontabおよび/etc/cron.d)の機能が失われる可能性があることに注意してください。
パトコスチャバ

3
私が推測する好ましい解決策はcrontab -u <user> -e、すべてを1つの場所に保持することであり、これはルートとして実行できます。ただし、cronジョブはユーザーごとではなく機能ごとにグループ化するのが好きなので、これは私にとって望ましい解決策です。
スチュアートH

41

rootとして、user1のcronを編集するには:

crontab -u user1 -e

以下を使用してコマンドを開始することもできます。

su user1 -c foo bar

ただし、多くの場合、スクリプト自体は、rootとして起動されたときに独自のアクセスを制限します。


1

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

user1としてスクリプトを作成します

ssh user1@ipaddress
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ディレクトリが表示されます... OKです)

分が変わるのを待つ

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

nano /home/user1/yay.txt

ナノウィンドウの一番下に「新規ファイル...」と表示されている場合は、「YAY it works」を最初の行としてナノウィンドウを開く必要があります。

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

平和


0

特に「rbenv」、「nvm」を使用する場合は、次のように、ユーザーに環境をロードさせたい場合があります。

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.