Articles of shell scripting

从FTP服务器streamtar.gz文件

这是情况:我有一个FTP服务器上可以包含任意数量的文件tar.gz文件。 现在我想要完成的是将这个文件通过Hadoop作业stream式传输并上传到HDFS。 Hadoop这个事实并不重要,最后我需要做的是编写一些shell脚本,将这个文件转换成wgetforms,并将输出写入stream中。 我真的需要使用stream的原因是会有大量的这些文件,每个文件将是巨大的。 如果我有一个gzip文件,这样做很容易,我正在做这样的事情: wget -O – "ftp://${user}:${pass}@${host}/$file" | zcat 但是我甚至不确定这是否可能用于tar.gz文件,特别是因为存档中有多个文件。 我有点困惑,为此采取什么方向,任何帮助将不胜感激。

陷阱“”HUP vs Nohup? 我如何在nohub模式下运行一部分shell脚本?

我想在周末运行一个shell脚本,但是我想确保terminal是否失去连接,我的脚本不会被终止。 我使用nohup整个脚本invokation,但我也想执行我的shell脚本的一部分,如果有人closures我的terminal,我的脚本仍然在后台运行。 这是一个简单的例子: #!/bin/bash echo "Start the trap" trap " " HUP echo "Sleeping for 60 Seconds" sleep 60 echo "I just woke up!" 请build议我应该做什么? 当我closures我的terminal选项卡时,“HUP”陷阱似乎不起作用。

awk + ​​perl +得到awk语法的两个参数

请咨询我的awk语法有什么问题,以及如何解决这个问题(这个语法是在我的ksh脚本中),我在Linux机器上运行我的脚本 我的目标是从file.txt只得到date之间的行: 从2012年4月19日至2012年4月22日 备注 – 其他解决scheme可以用Perl [root@test1 /var/tmp]# a='2012/04/19' [root@test1 /var/tmp]# b='2012/04/22' [root@test1 /var/tmp]# awk -v A=$a -v B=$b '/A/,/B/' file.txt awk: syntax error near line 1 awk: bailing out near line 1 file.txt的 [ 2012/04/18 21:49:01:857 ] Monitor::handle_client_message(): [ 2012/04/18 21:50:02:379 ] Monitor::handle_client_message( [ 2012/04/18 21:57:52:64 ] Monitor::handle_client_message(): [ 2012/04/18 21:57:52:252 ] Monitor::handle_client_message( [ […]

寻找一种方法来包装一个命令,并给自己的shell

我正在使用相同的模式手动执行相同的命令多次手动命令行。 现在我正在寻找一种方法来简化它只需input一次命令。 让我们看看一个普通的docker例子: docker ps docker ps -a docker ps -l docker stop x docker start x docker start y docker logs y docker logs -fz 这个例子也适用于更多的命令,如git,brew,gulp,gcloud。 现在我正在寻找某种命令封装器的shell,它允许我with docker来编写,它将把任何命令封装在嵌套/子shell中。 然后,我不需要预先执行docker命令,只需调用: >ps # does docker ps and displays result >stop x # prepends docker so docker stop x is actually executed CTRL+C # to exit the […]

FreeBSD rc.d脚本不作为守护进程启动

我在位置/usr/local/etc/rc.d/bluesky开发了以下脚本 #!/bin/sh # PROVIDE: bluesky # REQUIRE: mysql sshd # BEFORE: # KEYWORD: . /etc/rc.subr name="bluesky" rcvar=bluesky_enable start_cmd="${name}_start" stop_cmd=":" load_rc_config $name : ${bluesky_enable:=no} : ${bluesky_msg="HTTP server starts …"} bluesky_start(){ echo $PATH export PATH=$PATH:/usr/local/bin/ echo $PATH ### Run Node server ### /usr/local/bin/node /usr/home/ict/Documents/bluesky/server.js echo "$bluesky_msg" } run_rc_command "$1" 我也在/etc/rc.conf文件中启用了它: bluesky_enable="YES" 当我重新启动服务器时,脚本工作正常,并在端口80启动HTTP服务器。唯一的问题是脚本不会被发送到后台或不会作为守护进程启动。 我想知道如何在后台运行脚本或作为守护进程运行脚本。

FreeBSD rc.d脚本在启动时不起作用

我正在尝试编写一个rc.d脚本来在计算机启动时启动FreeBSD上的fastcgi-mono-server4,以便使用nginx运行它。 当我在服务器上login时执行脚本时,脚本就起作用 – 但是在启动时,我收到以下消息: eval: -applications=192.168.50.133:/:/usr/local/www/nginx: not found 该脚本如下所示: #!/bin/sh # PROVIDE: monofcgid # REQUIRE: LOGIN nginx # KEYWORD: shutdown . /etc/rc.subr name="monofcgid" rcvar="monofcgid_enable" stop_cmd="${name}_stop" start_cmd="${name}_start" start_precmd="${name}_prestart" start_postcmd="${name}_poststart" stop_postcmd="${name}_poststop" command=$(which fastcgi-mono-server4) apps="192.168.50.133:/:/usr/local/www/nginx" pidfile="/var/run/${name}.pid" monofcgid_prestart() { if [ -f $pidfile ]; then echo "monofcgid is already running." exit 0 fi } monofcgid_start() { echo "Starting monofcgid." […]

CentOS 6.2 cron.daily

我在/etc/cron.daily中创build了一个包含简单数据库备份脚本的新文件“dbbackup”。 #!/bin/sh mysqldump -h localhost -u user -p'passord' database_name > /var/www/sites/example.com/backups/db_backup_"`eval date +%u%m%Y`".sql 现在的问题是这个文件没有被自动运行,我对Linux服务器是相当新的,但从阅读我发现这是您需要创build您的cron脚本的位置,但由于某种原因,它不运行它,也许我需要告诉CRON一些如何在terminal上运行这个文件有没有人知道? 谢谢

在zsh中,如何将stderrredirect到for或foreach循环中的/ dev / null?

我试图在bash中完成一些简单的操作:查找文件夹中的文件,并在存在的情况下获取它们(如果没有文件,则不输出)。 在Bourne炮弹这是如何做到这一点: 如果[-d /etc/profile.d]; 然后 对于`ls -1 /etc/profile.d/*.sh 2> / dev / null`中的f; 做 。 $ F DONE 科幻 我是zsh的新手,无法获得相应的工作。 我究竟做错了什么? 如果[[-d“/etc/zsh.d”]]; 然后 (ls -1 /etc/zsh.d/*.zsh 2> / dev / null)中的文件。 做 源$文件 DONE 科幻 失败: parse error near '>' 。 我已经尝试了很多变化,不能像sh / bash那样平滑。 就好像redirect不总是在子壳内工作。

命令不在crontab中执行,而命令本身工作得很好

我在Github上有Colin Johnson的脚本 – https://github.com/colinbjohnson/aws-missing-tools/tree/master/ec2-automate-backup 这似乎很棒。 每次创build或删除EBS快照时,我都会修改它以发送电子邮件给自己。 下面的作品就像一个魅力 ec2-automate-backup.sh -v“vol-myvolumeid”-k 3 然而,它根本不作为我的crontab的一部分(我没有收到任何电子邮件) #some被注释掉的命令 * / 5 * * * * ec2-automate-backup.sh -v“vol-fb2fbcdf”-k 3; * * * * * date >> /root/logs/crontab.log; * / 5 * * * * date >> /root/logs/crontab2.log 请注意,第二和第三个执行罚款,因为我可以在日志文件中看到date和时间。 我在这里错过了什么? 完整的ec2-automate-backup.sh如下所示: #!/bin/bash – # Author: Colin Johnson / [email protected] # Date: 2012-09-24 # […]

开球命令是减less线?

我有这样的代码: 54 08 * * * /usr/local/bin/curator –dry-run –config /home/itadmin/.curator/curator.yml /home/itadmin/.curator/daily.yml 2>&1 | /usr/bin/tee -a /home/itadmin/.curator/logs.txt | /usr/bin/tee /home/itadmin/.curator/history.txt | if [ $(wc -l </home/itadmin/.curator/history.txt) -ge 2 ]; then mail -s 'Snapshot Status' [email protected]; fi 我在做的是我发送cron的输出到logs.txt为历史目的,并发送相同的history.txt,其中if条件将工作。 其实cron的输出是这样的 2017-05-17 08:33:01,395 INFO Preparing Action ID: 1, "snapshot" 2017-05-17 08:33:01,404 INFO Master-only flag detected. Connected to non-master node. […]