In [1]:
# pip install python-crontab
In [5]:
from crontab import CronTab
cron = CronTab(user=True)  
cron
Out[5]:
<My CronTab>
In [8]:
# すでに登録されているjobを見る
for job in cron:  
    print (job)
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
30 * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py progate >> /mnt/c/workspace/pydev/tweet-analyser/autoLike.log # m h  dom mon dow   command
In [14]:
# ジョブを追加する
job = cron.new(command='python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy') 
job.minute.every(1) #1分おきに実行
cron.write()  
# 設定したjobを見る
cron = CronTab(user=True)
for job in cron:
    print(job)
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
30 * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py progate >> /mnt/c/workspace/pydev/tweet-analyser/autoLike.log # m h  dom mon dow   command
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
In [ ]:
#ジョブを追加する場合
"""
job.minute.every(minutes)  # 分ごと
job.hour.every(hours)  #時間ごと
"""
#ジョブを有効・無効にする
"""
job.enable()  
job.enable(False)  
job.is_enabled()  #有効だったらTrueが返る
"""
In [21]:
# ジョブを検索する progate
from crontab import CronTab
cron = CronTab(user=True)
cron = cron.find_command("autoLike.py progate")
for job in cron:
    print(job)
30 * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py progate >> /mnt/c/workspace/pydev/tweet-analyser/autoLike.log # m h  dom mon dow   command
In [23]:
# ジョブを検索する
from crontab import CronTab
cron = CronTab(user=True)
cron = cron.find_command("autoLike.py progate")
for job in cron:
    print(job)
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py udemy
In [26]:
# ジョブを削除する
cron = CronTab(user=True)
cron = cron.find_command("autoLike.py progate")
for job in cron:
    cron.remove(job) 
    print(job)
30 * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autoLike.py progate >> /mnt/c/workspace/pydev/tweet-analyser/autoLike.log # m h  dom mon dow   command
In [8]:
#ジョブを見つけて有効・無効化する

from crontab import CronTab
cron = CronTab(user=True)  
cron = cron.find_command("VRChatはじめました")
for job in cron:
    print(job)
    job.enable()
    print(job)
In [7]:
cron = CronTab(user=True)  
for job in cron:
    print(job)
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py テックキャンプ
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy
In [4]:
from crontab import CronTab
cron = CronTab(user=True) 
for job in cron:
    print(job)
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py テックキャンプ
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy
In [5]:
from crontab import CronTab
cron = CronTab(user=True) 
for job in cron:
    job.enable()
    
In [6]:
cron = CronTab(user=True)
for job in cron:
    print(job)
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py テックキャンプ
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy

わかったこと

  • job.enable()を実行したとしても、その結果がcrontabに保存されるわけではない
  • その証拠にもう一度cronオブジェクトからjobを見ると反映されていない
from crontab import CronTab
cron = CronTab(user=True) 
for job in cron:
    job.enable()

次にやること

  • job.enableしたコマンドを反映する方法を探す

試してみる

  • 以下のtab指定でcronオブジェクトつくって、保存するとかできないか試してみる
    mem_cron = CronTab(tab="""
    * * * * * command
    """)
In [18]:
from crontab import CronTab
cron = CronTab(user=True)
job = cron.find_command("Aidemy")
for job in cron:
    print(job)
    job.enable()
    cron.write()
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py テックキャンプ
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy
In [19]:
cron = CronTab(user=True)
for job in cron:
    print(job)
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py テックキャンプ
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy

試したこと

  • すでに存在するjob「テックキャンプ」から、find_commandでjobを探して、そのjobをenable()にした
  • その結果のcronをwriteを実行して保存した

結果

  • すべてのjobが有効化された
  • ただし、選択したjob意外のものも選ばれてしまっている。

次に試すこと

  • 検索したjobのみ無効化できるか試す
In [21]:
cron = CronTab(user=True)
jobs = cron.find_command("Aidemy")
for job in jobs:
    print(job)
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy
  • こうするとAidemyだけ出てくる。
  • このjobだけ有効化する
In [26]:
cron = CronTab(user=True)
jobs = cron.find_command("Aidemy")
for job in jobs:
    job.enable(False)
    print(job)
    cron.write()
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy
  • その後crontabに保存されているか確認する
  • これで無効化されていればok
In [27]:
cron = CronTab(user=True)
for job in cron:
    print(job)
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py テックキャンプ
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy

結果

  • というわけで、jobの無効化に成功した。
  • 最終的に、ピンポイントで有効化できるか確認する
In [29]:
cron = CronTab(user=True)
jobs = cron.find_command("Aidemy")
for job in jobs:
    print(job)
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy
In [31]:
cron = CronTab(user=True)
jobs = cron.find_command("Aidemy")
for job in jobs:
    job.enable()
    print(job)
    cron.write()
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy

やりたいこと

  • キーワードの削除時に、crontabのon off関係なく、そのキーワードの単語を削除したい
  • 特定のキーワードを検索して削除することができるかどうか確認する
In [1]:
from crontab import CronTab

cron = CronTab(user=True)
for job in cron:
    print(job)
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py テックキャンプ
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy
  • テックキャンプのcrontabを削除してみる
In [11]:
from crontab import CronTab

cron = CronTab(user=True)
jobs = cron.find_command("テックキャンプ")
for job in jobs:
    cron.remove(job)
    cro
    print(job)
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py テックキャンプ
In [12]:
from crontab import CronTab
cron = CronTab(user=True)
for job in cron:
    print(job)
0 5 * * 1 tar -zcf /var/backups/home.tgz /home/ # at 5 a.m every week with:
# * * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py テックキャンプ
* * * * * python3 /mnt/c/workspace/pydev/tweet-analyser/autolike.py Aidemy