shell 脚本编程小记

shell 脚本编程,主要是为了打包命令,减少重复工作。

第一部分

我在 /home/root/shellpractice 下新建一个文本 who,输入以下内容:

#!/bin/bash
# This script displays the date and who's logged on
date
who

在通常的 shell 脚本中,井号(#)用作注释行。 shell 并不会处理 shell 脚本中的注释行。
“#!” 是一个约定的标记,它告诉系统这个脚本需要什么解释器来执行。

在当前目录下,运行该脚本

./who
-bash: ./who: Permission denied

这是因为文件所有者没有执行权限

chmod u+x ./who

好了,再次运行该脚本。这就算是一个脚本编程了。

第二部分

Linux 系统使用 cron 程序来安排要定期执行的作业。 cron 程序会在后台运行并检查一个特殊的表(被称作 cron 时间表) ,以获知已安排执行的作业。

如何设置 Magento2 的 cron job 中提到 Magento 2 需要的 cron 设置。

这里将记录一个小例子,每分钟调用 echotime.php 这个脚本。

新建 echotime.php 文件输入以下内容:

<?php
echo date('Y-m-d H:i:s'). " from hellomagento2.com \n";

然后给 echotime.php 执行的权限:

chmod u+x echotime.php

如果我们此时执行:

$ php echotime.php
2017-11-14 16:57:28 from hellomagento2.com

然后我们看下 php 的位置:
whereis php

向 cron 时间表中添加条目

crontab -e

然后他会让你选择编辑器,然后我们添加内容如下:

* * * * * /usr/bin/php /home/thankit/www/echotime.php >> /home/thankit/www/echotime.log

这样就会每分钟执行 echotime.php 并将结果输出到 echotime.log 文件中。

> 是输出重定向符号,他会覆盖原先的内容。 >> 则不会覆盖,而是追加内容。

所以接下来查看 echotime.log 会发现已经起作用了。

需要注意的是,cron 会以创建该任务的所有者的身份执行命令。所以如果我希望以 root 的身份执行某个定时任务,我必须以 root 的身份来提交该定时任务。

查看任务:

crontab -l

删除:

$ crontab -r
no crontab for thankit

参考资料

Shell脚本编程30分钟入门
《Linux 命令与 shell 脚本编程大全》

发表评论

电子邮件地址不会被公开。 必填项已用*标注