62141


Ubuntuサーバーで、crontabにて定期的にdajangoのカスタムコマンドを実行するように、システムを組んでいます。  
上記の目的を行う際の、crontabのサンプルコードが紹介されているサイト等を参考にして、自分の環境で試していますが、crontabで設定したとおりにカスタムコマンドが実行されません。

推測ですが、最初の処理の仮想環境を有効する際の、rootでの処理がうまくいっていないのではないかと考えています。  
Ubuntuはデフォルトで、rootのログインがないので、crontabでコマンドを実行する際に、どのようにrootの処理をすれば良いのかわかりません。

解決策についてご教授いただきないでしょうか？

crontab内のコード

[code]

    00  18  *  *  *  root source /home/ubuntu/venv/bin/activate && python3 /home/ubuntu/project/manage.py custom_command && deactivate
    
[/code]

ディレクトリのレイアウト

[code]

    home
    __ ubuntu
    ____ venv
    ____ project
    
[/code]

実行環境  
Ubuntu: 19.10  
Python: 3.7.5  
Django: 2.2.2

* * *

**追記：**質問後に試した事  
・crondが起動しているかどうか確認→OK

[code]

    $ service cron status
    
[/code]

・登録されているcronを表示させて確認→OK

[code]

    $ crontab -l
    
[/code]

crontab内のコードの変更（rootをはずす）→NG

[code]

    */1  *  *  *  *  source /home/ubuntu/venv/bin/activate && python3 /home/ubuntu/project/manage.py custom_command && deactivate
    
[/code]

crontab内のコードの変更（sudo su でやってみる）→NG

[code]

    */1  *  *  *  *  sudo su && source /home/ubuntu/venv/bin/activate && python3 /home/ubuntu/project/manage.py custom_command && deactivate
    
[/code]

$ sudo suでroot権限でコマンドの確認をすると

[code]

    # root source /home/ubuntu/venv/bin/activate && python3 /home/ubuntu/project/manage.py custom_command && deactivate
    
[/code]

下記のメッセージ

[code]

    Command 'root' not found, did you mean:
    
      command 'rott' from deb rott (1.1.2+svn287-3)
      command 'proot' from deb proot (5.1.0-1.3)
      command 'toot' from deb toot (0.22.0-1)
      command 'rootv' from deb xawtv (3.106-1)
    
    Try: apt install <deb name>
    
[/code]


CC BY-SA 4.0
2020-01-10T12:00:56.747
62135
2020-01-11T05:29:43.543
2020-01-11T05:29:43.543
3060
36988
question
python python3 ubuntu django cron
Ubuntu で crontab から root 権限でコマンドを実行したい


コマンドそのものは root 権限で正しく実行できるとのことですので、

[code]

    sudo crontab -e
    
[/code]

でエディタが起動するので、

[code]

    0 18 * * * source /home/ubuntu/venv/bin/activate && python3 /home/ubuntu/project/manage.py custom_command && deactivate
    
[/code]

と書いて保存し、エディタを終了すれば、18:00 に root 権限で実行されるはずです。

もしこれで動作しない場合は、代わりに

[code]

    0 18 * * * ( source /home/ubuntu/venv/bin/activate && python3 /home/ubuntu/project/manage.py custom_command && deactivate ) > /tmp/log 2>&1
    
[/code]

とすれば、`/tmp/log` にエラーが出力されるので、解決の糸口になると思います。

そうそう、タイムゾーンが合っていることも確認しておく必要があります。  
コマンドラインから以下のように実行して、

[code]

    date
    
[/code]

末尾に JST と書いてあれば大丈夫です。


CC BY-SA 4.0
2020-01-10T16:46:22.950
62141
2020-01-10T16:46:22.950
5288
62135
answer