尝试在Ubuntu上使用cron
简要概述
我在Ubuntu上尝试使用cron执行简单的定期处理任务。
背景 – One option for paraphrasing in Chinese would be “上下文” .
我之前听过”cron”、”crontab”这两个词,但从未尝试过使用它们,所以我决定实际操作一下。
目标
执行简单的定期处理,并确认其是否在日志中输出。
适用读者
- cronに興味がある方
假设
必须:使用Linux操作系统(本次使用Ubuntu版本)
推荐:具备基本的命令行知识
环境
-
- ホストOS:Window10 Home
-
- WSL:WSL2
- Ubuntu:22.04.2 LTS
操作步骤
在进入步骤之前,首先需要补充一下前提条件。
首先,根据维基百科的解释,cron到底是什么呢?如下所述。
Crontab(亦称为Cron Tab、Clone Tab、以及Coulong Tab)命令是用于管理Unix系操作系统(OS)中定时执行命令的调度的命令。
换句话说,由于这是一个可以在Unix系列操作系统上使用的命令,所以我们决定在Ubuntu上尝试一下。
如果能够安装Ubuntu,无论是专用机还是虚拟化软件如VirtualBox都没有问题,但本次决定使用WSL(Windows Subsystem for Linux)。关于WSL的详细介绍将在另一篇文章中进行,它是微软官方提供的一种在Windows上运行Linux程序的机制。安装WSL后,默认会安装Ubuntu(应该是的),所以方便易用(无需启动VirtualBox等软件),因此这次选择了WSL。
我对于cron也正在学习中,通过向crontab文件中写入要定期执行的任务和其内容,可以实现指定的任务被执行的功能。接下来,我将尝试使用cron。
这次我参考了下面的文章。
非常感谢你。
准备执行的任务
这次是为了试验而准备的,我根据之前介绍的文章准备了文件。
首先是可执行文件。
我准备了一个与文章中相同的test.sh文件。
如果尝试运行sh test.sh,会返回hello的字样。
此外,还可以通过ls命令确认已创建了log的文本文件。
日志中确实记录了相关内容。
执行cron任务
那么,我们将运行上述准备好的sh文件。
使用crontab命令进行执行。
关于命令选项,我在Oracle的官网上找到了相关说明,我将摘录如下。
请参考上面的URL获取详细信息。
-–e
現在のユーザーの crontab ファイルのコピーを編集します。crontab が存在しない場合は、空のファイルを作成して編集します。編集が終了すると、このファイルがユーザーの crontab ファイルとしてインストールされます。
–e オプションを指定してファイルを編集するときに起動するエディタは、環境変数 EDITOR によって決まります。crontab のジョブを登録するときは、必ず crontab を使用してください。crontab ファイルを直接編集してジョブを追加しないでください。これは、cron はこの方法による変更を認識しないためです。
crontab ファイル内のすべての行を削除すると、古い crontab ファイルが復元されます。すべての行を削除する正しい方法は、–r オプションを使用して crontab ファイルを削除する方法です。
username が指定された場合、 現在のユーザーの crontab ファイルではなく、指定のユーザーの crontab ファイルを編集します。これを行えるのは、root と solaris.jobs.admin 承認を持つユーザーだけです。
–l
crontab を起動したユーザーの crontab ファイルの内容を表示します。–l オプションのあとにユーザー名を指定して、指定のユーザーの crontab ファイルを表示できるのは、root または solaris.jobs.admin の承認を受けているユーザーだけです。
–r
crontab ディレクトリからユーザーの crontab を削除します。r オプションのあとにユーザー名を指定して、指定のユーザーの –crontab ファイルを削除できるのは、root または solaris.jobs.admin の承認を受けているユーザーだけです。
因此,本次我們將在crontab文件上添加-e選項,以便定期執行test.sh。
コマンド実行すると以下のようにメッセージが出ました。
簡単ということなので、nano(1.)を選択。
記事を参考に記述します。
左から分、時、日、月、曜日(0-6で0が日曜)になります。
今回は毎分、毎時、毎日、毎月、曜日はすべて*
で実行します。
(参考にした記事では分の部分が*/1になっていましたが、*でも問題なく実行できました。)
我确认每分钟都有正确的更新日志,并且测试脚本test.sh能够无误地执行。
自分特有だと思いますが、作業フォルダをtestとしてその配下にtest.shを作った関係か、
testlog.txtのファイル生成先がshがあるtestディレクトリの一つ上にできてしまったので、
焦りました。。
(test.shを以下のように書き換えることでshと同じ階層にログを出力することができました。)
結果
無事crontabによる定期処理を実行することができました。
学び
可以比预想的更轻松地进行定期处理。
总结
今後はもう少し複雑な処理も定期実行できるようにしたいです。