{ Hello Magento 2 }

解决 Magento 2 应用问题,更注重深度挖掘。(ง •̀_•́)ง

0%

shell 脚本编程小记

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

第一部分

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

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

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

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

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

1
chmod u+x ./who

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

第二部分

Linux 系统使用 cron 程序来安排要定期执行的作业。 cron 程序会在后台运行并检查一个特殊的表(被称作 cron 时间表) ,以获知已安排执行的作业。 如何设置 Magento2 的 cron job 中提到 Magento 2 需要的 cron 设置。 这里将记录一个小例子,每分钟调用 echotime.php 这个脚本。 新建 echotime.php 文件输入以下内容:

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

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

1
chmod u+x echotime.php

如果我们此时执行:

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

然后我们看下 php 的位置: whereis php 向 cron 时间表中添加条目

1
crontab -e

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

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

这样就会每分钟执行 echotime.php 并将结果输出到 echotime.log 文件中。 > 是输出重定向符号,他会覆盖原先的内容。 >> 则不会覆盖,而是追加内容。 所以接下来查看 echotime.log 会发现已经起作用了。 需要注意的是,cron 会以创建该任务的所有者的身份执行命令。所以如果我希望以 root 的身份执行某个定时任务,我必须以 root 的身份来提交该定时任务。 查看任务:

1
crontab -l

删除:

1
2
$ crontab -r
no crontab for thankit

参考资料

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