Category Archives: Bash

php debugging the really really hard way

If you’re ever in a situation where something is only happening intermittently, and only on a live server, and only while it’s under load… Lets say its not generating any error_log or stderr output, and you cant run it manually to reproduce… (we’ve all been in this situation) How do you get any debugging output [...]

Using wait, $!, and () for threading in bash

This is a simplistic use of the pattern that I wrote about in my last post to wait on multiple commands in bash. In essence I have a script which runs a command (like uptime or restarting a daemon) on a whole bunch of servers (think pssh). Anyways… this is how I modified the script [...]

bash – collecting the return value of backgrounded processes

You know that you can run something in the background in a bash script with ( command )&, but a coworker recently wanted to run multiple commands, wait for all of them to complete, collect and decide what to do based on their return values… this proved much trickier. Luckily there is an answer #!/bin/bash [...]

Command line arguments in bash scripts

This is something that has always annoyed me about bash scripts… The fact that it’s difficult to run /path/to/script.sh –foo=bar -v -n 10 blah -one=’last arg’ So I decided to write up a bash function that let me easily (once the function was complete) access this type of information. And because I like sharing, here [...]

Bash Coding Convention ../

We use dirname() a lot in php to make relative paths work from multiple locations like so. The advantages are many: require dirname( dirname( __FILE__ ) ) . ‘/required-file.php’; $data = file_get_contents( dirname(__FILE__).’/data/info.dat’); But in bash we often dont do the same thing, we settle for the old standby “../”. Which is a shame because [...]

As Close to A Real Daemon As Bash Scripts Get

I’ve written a little something which is gaining some traction internally, and I always intended to share it with the world. So… Here. daemon-functions.sh What it does is allow you to write a bash function called “payload” like so: function payload() { while [ true ]; do checkforterm date sleep 1 done } source path/to/daemon-functions.sh [...]

Bash Tip: Closing File Descriptors

I recently found that you can close bash file descriptors fairly easily, it goes like this: exec 0>&- # close stdin exec 1>&- # close stdout exec 2>&- # close stderr Which makes it easy to daemonize things using only bash (lets face it there are times when you JUST don’t need anything more than [...]

Scripting without killing system load

Let us pretend for a moment that you have a critical system which can *just* handle the strain that it’s under (I’m sure all of you have workloads well under your system capabilities, or capabilities well over your workload requirements, of course; still for the sake of argument…) And you have a job to do [...]

Backgrounding Chained Commands in Bash

Sometimes it’s desirable to have a chain of commands backgrounded so that a multi-step process can be run in parallel. And often times its not desirable to have yet another script made to do a simple task that doesn’t warrant the added complexity. An example of this would be running backups in parallel. The script [...]