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 脚本编程大全》